2012-05-23 176 views
7

我只是一個簡單的問題,但我找不到任何答案。Rails - 用功能測試測試JSON API

我在軌道上的紅寶石3.2.2應用程序有一個設計會話認證的JSON API。

我的問題是:我該如何用功能或集成測試來測試這個API--並且有辦法處理會話嗎?

我沒有前端,只是一個API,我可以做GET。 POST。放。並用JSON Body刪除。

這是測試這種自動化的最佳方法嗎?

實例創建新的用戶

POST www.exmaple.com/users

{ 
"user":{ 
    "email" : "[email protected]", 
    "password " : "mypass" 
    } 
} 

回答

16

這是很容易與功能測試做。在用戶的例子,我會對她們spec/controllers/users_controller_spec.rb在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 

很明顯,可以優化上述規格,但這應該讓你開始。乾杯。

+1

爲什麼你推薦我使用rspec?什麼是rspec,rspec和正常測試有什麼不同。 – Lailo

+0

「正常測試」是什麼意思?我只是喜歡Rspec的方便DSL和輔助方法的真實性。你目前使用什麼? –

1

您可以將用戶黃瓜(BDD)來測試這種情況下,例如:

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

然後,你只需要編寫你的步驟,其中pickle寶石'非常有用