我对 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 测试,以确保操作根据请求是否响应正确的代码:
- 使用 HTTP/SSL 发送
- 使用
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 中的正确钩子是什么:
- 模拟请求
- 指示请求应该或不应该通过 HTTPS/SSL “发送”
- 指示应将哪些参数发送到服务器
- 模拟通过 POST 发送请求
- 检查服务器的响应代码是什么
我们正在使用 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