我是RSpec的新手。我正在为我们在Rails中创建的REST API编写测试。 API由一个操作组成,其中包含以下规范:
只有在以下情况下才会接受请求:
- 使用HTTPS
制作- 它作为POST请求发送
- 使用以下参数发送:value_name,value,item_id
例如,有效请求是:
POST /new_api/action HTTPS/1.0
snip
Content-Type: application/x-www-form-urlencoded
Content-Length: 52
value_name=Contract+Id&value=abcdef123456&item_id=38
规范声明如果发送的请求符合这些要求,服务器将使用200
代码进行响应。如果发送的请求不符合这些要求,服务器将使用400
代码进行响应。
根据这些要求,我想编写RSpec测试,确保操作响应正确的代码,具体取决于请求:
POST
或其他请求类型对于我想写的测试之一,这是假的Ruby:
describe 'New REST API' do
it 'should accept valid requests'
request = mock a request that
uses HTTPS
has these parameters: {:value_name => "name",\
:value => 1, :item_id => 2}
end
post name_of_new_action using request
response.status.should be(200)
end
end
RSpec中适当的钩子是什么:
我们正在使用Rails 3.2.13和Ruby 1.8.7(这是我们正在维护的旧应用程序)。我们的Gemfile有
gem 'rspec-rails', '~> 2.11.0'
gem 'guard-rspec', '~> 1.2.1'
gem 'capybara', '~> 1.1.2'
gem 'database_cleaner', '~> 1.1.1'
gem 'factory_girl_rails', '~> 1.7.0
答案 0 :(得分:1)
您需要的一切都是Rails集成测试库中的本机,甚至不需要Rspec。
使用HTTPS
制作get test_path, nil, {'HTTPS'=>'on'}
它作为POST请求发送
post test_path, {foo: 'bar', fff: 'bbb'}
使用以下参数发送它:value_name,value,item_id,在HTTPS中。
post test_path, {value_name: 'abc', value: 'foo', item_id: 'bar'}, {'HTTPS'=>'on'}
检查响应是否需要Rspec
expect(response).to be_success
expect(response.status).to eq(200)
expect(response.body).to match(/some string in body/)