了解Rail应用程序中的一段RSpec代码

时间:2013-05-03 15:58:53

标签: ruby-on-rails-3.2 rspec2

所以在Rpsec代码中,我看到这样的事情,所以我想我们只是在这里为我们的测试初始化​​变量:

  let(:base_uri) { 'http://127.0.0.1' }
  let(:tenant_id) { 'tenant_id' }
  let(:client) { PersonSearch::Client.new(base_uri, tenant_id) }
  let(:mock_http) { double('Net::HTTP') }
  let(:mock_request) { double('Net::HTTP::Get') }
  let(:mock_response) { double('HTTPResponse') }
  let(:path) { "/people/search?#{ params.to_param }" }

然后例如在测试中我看到了类似的东西:

context 'default parameters' do
let(:params) { { search_query: 'a', page: client.default_page, page_size: client.default_page_size } }
let(:mock_results) do
  PersonSearchServicesHelper.create_mock_person_search_result(client.default_page_size).to_json
end

it 'uses default params when options are missing' do
  client.stub(:create_http_request).and_return([mock_http, mock_request])
  client.stub(:request).and_return(mock_response)
  client.should_receive(:create_http_request).with(:get, path, {})
  client.should_receive(:request).with(mock_http, mock_request, client.retry_on).once

  mock_response.stub(:body).and_return(mock_results)

我最重要的事情是我没有得到它"是" .stub"部分。有人可以再夸大它为什么我们这样做以及它发生了什么?如果有我可以参考的文档链接,那就太好了。

1 个答案:

答案 0 :(得分:0)

请参阅https://www.relishapp.com/rspec/rspec-mocks/v/2-13/docs/method-stubshttps://github.com/rspec/rspec-mocks

这就是所谓的test stubs;具有预定义响应的对象上的方法的替身。

stub视为覆盖对象方法的较短方式,而不是:

def client.create_http_request
  [mock_http, mock_request]
end

有关以下之间细微差别的更多信息:模拟,存根和假货可以读取http://www.martinfowler.com/bliki/TestDouble.htmlhttp://martinfowler.com/articles/mocksArentStubs.html