7

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" : "[email protected]",
    "password " : "mypass"
  }
}

3 Answers 3

16

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: "[email protected]", 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.

Sign up to request clarification or add additional context in comments.

2 Comments

Why you recommended me to use rspec? What is rspec and what is the difference rspec and normal tests.
What do you mean by "normal tests"? I just like Rspec for convenient DSL and the verity of helper methods. What are you currently using?
2

Have a look at Anthony Eden's talk "Build and Test APIs with Ruby and Cucumber"

Comments

1

You can user Cucumber(BDD) to test such cases, for example:

Feature: Successful login
  In order to login
  As a user 
  I want to use my super API

  Scenario: List user
    Given the system knows about the following user:
      | email            | username |
      | [email protected] | blabla   |
    When the user requests POST /users
    Then the response should be JSON:
    """
    [
      {"email": "[email protected]", "username": "blabla"}
    ]
    """

then, you just need to write your steps, where pickle gem 'd be very useful

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.