0

我想知道测试 REST API 的最佳实践(在这种情况下,使用 Sinatra 和 Rspec)。明显的问题是,如果您有一个检查GET /users用户列表的测试,您会希望经历创建用户、运行测试、然后销毁用户的各个阶段。但是,如果创建/销毁步骤也依赖于 API,那么您最终要么打破基于有序的测试规则,要么在一个测试中测试多个事物(例如,它是否添加了一个用户?......确实GET /users返回了一个用户列表...是否删除了用户?)。

4

2 回答 2

0

您可以使用 FactoryGirl。在您的测试中,您可以通过 API 创建用户或使用 FG 创建存根,然后删除、修改等。FG 是一个非常灵活的 ORM 测试助手,非常适合这类东西。

于 2012-06-20T10:43:03.977 回答
0

我也同意@three - 使用FactoryGirl

举个例子(首先,定义一个示例对象):

FactoryGirl.define do

   sequence(:random_ranking) do |n|
      @random_rankings ||= (1..10000).to_a.shuffle
      @random_rankings[n]
   end

   factory :todo do
      title { Faker::Lorem.sentence}
      id { FactoryGirl.generate(:random_ranking) }
      completed [true, false].sample
      completed_at Time.new
      created_at Time.new
      updated_at Time.new
   end

end

在您的规范测试中,描述您的列表操作:

describe 'GET #index' do

    before do

      @todos = FactoryGirl.create_list(:todo, 10)

      @todos.each do |todo|
        todo.should be_valid
      end

      get :index, :format => :json

    end


    it 'response should be OK' do
      response.status.should eq(200)
    end

    it 'response should return the same json objects list' do

      response_result = JSON.parse(response.body)

      # these should do the same
      # response_result.should =~ JSON.parse(@todos.to_json)
      response_result.should match_array(JSON.parse(@todos.to_json))

    end

end
于 2014-03-17T21:11:28.330 回答