7

我只有一个简单的问题,但我找不到任何答案。

我的 ruby​​ on rails 3.2.2 appilcation 有一个带有设计会话身份验证的 JSON API。

我的问题是:如何使用功能或集成测试来测试这个 API - 有没有办法处理会话?

我没有前端,只有一个可以 GET 的 API。邮政。放。并使用 JSON 正文删除。

测试这个自动化的最好方法是什么?

示例创建新用户

发布 www.exmaple.com/users

{
 "user":{
    "email" : "test@example.com",
    "password " : "mypass"
  }
}
4

3 回答 3

16

功能测试很容易做到。在用户示例中,我会将它们放入spec/controllers/users_controller_spec.rbRspec 中:

 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

显然,您可以优化上述规格,但这应该可以帮助您入门。干杯。

于 2012-05-23T14:13:33.823 回答
2

查看 Anthony Eden 的演讲“使用 Ruby 和 Cucumber 构建和测试 API”

于 2012-05-23T14:52:27.033 回答
1

您可以使用 Cucumber(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 |
      | test@example.com | blabla   |
    When the user requests POST /users
    Then the response should be JSON:
    """
    [
      {"email": "test@example.com", "username": "blabla"}
    ]
    """

然后,您只需要编写步骤,其中pickle gem 会非常有用

于 2012-05-23T19:06:12.153 回答