Ruby on rails RSpec中用于模拟请求各个方面的钩子在哪里?
我对RSpec很陌生。我正在为我们在Rails中制作的RESTAPI编写一个测试。API由一个操作组成,其将接受的请求规范如下: 只有在以下情况下,才会接受请求:Ruby on rails RSpec中用于模拟请求各个方面的钩子在哪里?,ruby-on-rails,rspec,ruby-on-rails-3.2,integration-testing,rspec-rails,Ruby On Rails,Rspec,Ruby On Rails 3.2,Integration Testing,Rspec Rails,我对RSpec很陌生。我正在为我们在Rails中制作的RESTAPI编写一个测试。API由一个操作组成,其将接受的请求规范如下: 只有在以下情况下,才会接受请求: 它是使用HTTPS制作的 它作为POST请求发送 它与以下参数一起发送:值\名称、值、项\ id 例如,有效的请求是: 该规范规定,如果发送满足这些要求的请求,服务器将使用200代码进行响应。如果发送的请求不符合这些要求,服务器将以400代码响应 根据这些要求,我想编写RSpec测试,以确保根据请求是否满足以下条件,使用正确的代码
- 它是使用HTTPS制作的
- 它作为POST请求发送
- 它与以下参数一起发送:值\名称、值、项\ id
200
代码进行响应。如果发送的请求不符合这些要求,服务器将以400
代码响应
根据这些要求,我想编写RSpec测试,以确保根据请求是否满足以下条件,使用正确的代码响应操作:
- 使用HTTP/SSL发送
- 使用
或其他请求类型发送POST
- 具有正确的参数
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中的适当挂钩是什么:
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
您需要的一切都是Rails集成测试库中的本机内容,甚至不需要Rspec
- 它是使用HTTPS制作的
get test_path, nil, {'HTTPS'=>'on'}
- 它作为POST请求发送
post test_path, {foo: 'bar', fff: 'bbb'}
- 它与以下参数一起发送:HTTPS中的value\u name、value、item\u id
post test_path, {value_name: 'abc', value: 'foo', item_id: 'bar'}, {'HTTPS'=>'on'}
expect(response).to be_success
expect(response.status).to eq(200)
expect(response.body).to match(/some string in body/)
如果我花足够长的时间去探索,我可能会找到所有这些问题的答案。不过,我对RSpec还是很陌生,我很难找到既能回答我的问题又能让我充分了解他们所说内容的介绍性文章。如果你不给我一个直接的答案,但给我指出可以帮助我的资源方向,我也会很感激。我们的团队已经在使用RSpec进行其他测试,这就是我想使用它的原因。RSpec中的同一个测试除了最后的断言之外是否会使用相同的代码?@Kevin,前一部分是Rails的一部分,可以在RSpec中用于测试控制器而不会出现任何问题。后一部分属于Rspec。您可能不熟悉
expect
,它只是另一种期望样式,类似于should
。在大多数情况下,它们可以互换使用,这是有道理的。回到办公室后,我会试试你的答案,等我的答案发挥作用后再接受它=)
expect(response).to be_success
expect(response.status).to eq(200)
expect(response.body).to match(/some string in body/)