测试Sinatra REST API方法

时间:2012-06-20 09:20:08

标签: api rest testing rspec sinatra

我想知道测试REST API的最佳实践(在这种情况下,使用Sinatra和Rspec)。显而易见的问题是,如果您有一个检查GET /users用户列表的测试,您需要完成创建用户,运行测试,然后销毁用户的各个阶段。但是,如果创建/销毁步骤也依赖于API,那么您最终要么违反基于有序的测试规则,要么在一次测试中测试多项内容(例如,是否添加了用户?... {{1}返回用户列表?..是否删除了用户?)。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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