RSpec中用于模拟请求的各个方面的钩子在哪里?

时间:2013-08-30 22:10:52

标签: ruby-on-rails rspec ruby-on-rails-3.2 integration-testing rspec-rails

我是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中适当的钩子是什么:

  1. 模拟请求
  2. 表示该请求应该或不应该通过HTTPS / SSL
  3. “发送”
  4. 指明应将哪些参数发送到服务器
  5. 模拟通过POST发送请求
  6. 检查服务器的响应代码是什么
  7. 我们正在使用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
    

1 个答案:

答案 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/)