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" } } ```