RSpec模拟服务和相应的方法

时间:2018-09-24 06:30:32

标签: ruby-on-rails rspec rspec-rails

我想模拟一个用0调用时返回整数get_auth_key.api_response_code的服务。

这是我到目前为止所拥有的:

  before(:each) do
    PolicyObjects::BpointRequestPolicy.any_instance.stub(:get_auth_key).and_return(OpenStruct.new(api_response_code: 0))
  end

我想避免在测试中为此创建类,因为我认为这太过分了。在代码库中的某个地方,response = PolicyObjects::BpointRequestPolicy.new(...)被调用,然后进行比较:if response.api_response_code == 0。我希望它返回0以在测试中达到条件条件。

最佳实践或最简单的方法是什么?

1 个答案:

答案 0 :(得分:1)

这是一个很好的用例,如果您知道要嘲笑的类,则是instance_double的两倍甚至更好:

let(:api_resonse) { instance_double("SomeResponseClass", api_response_code: 0) }  

before(:each) do 
  PolicyObjects::BpointRequestPolicy.any_instance.stub(:get_auth_key).and_return(api_response)
end