Rails - Testing JSON API with functional tests

ruby, ruby-on-rails, ruby-on-rails-3.1, testing, unit-testing

Solution

It is easy to do with functional tests. In a user example I would put them in `spec/controllers/users_controller_spec.rb` in Rspec:

 require 'spec_helper'

 describe UsersController do
   render_views # if you have RABL views

   before do
     @user_attributes = { email: "test@example.com", password: "mypass" }
   end

   describe "POST to create" do

     it "should change the number of users" do
        lambda do
          post :create, user: @user_attributes
        end.should change(User, :count).by(1)
     end

     it "should be successful" do
       post :create, user: @user_attributes
       response.should be_success
     end

     it "should set @user" do
       post :create, user: @user_attributes
       assigns(:user).email.should == @user_attributes[:email]
     end

     it "should return created user in json" do # depend on what you return in action
       post :create, user: @user_attributes
       body = JSON.parse(response.body)
       body["email"].should == @user_attributes[:email]
      end
  end

Obviously, you can optimize specs above, but this should get you started. Cheers.

Problem

I have just a simple question, but I could not found any answer. My ruby on rails 3.2.2 appilcation have a JSON API with a devise session authentication. My question is: How can I test this API with functional or integration tests - and is there a way to handle a session? I do not have a front end, just a API that I can do GET. POST. PUT. and DELETE with JSON Body. Which is the best way to test this automated? EXAMPLE create new user POST www.exmaple.com/users ``` { "user":{ "email" : "test@example.com", "password " : "mypass" } } ```

Original source