在 rspec rails 中放置长模拟/存根响应的位置

Rad*_*ian 3 rspec ruby-on-rails

api = double "myApi"
api.should_receive(:get_info).and_return({
  # a 360 lines hash!
})
Run Code Online (Sandbox Code Playgroud)

我想提供应该从这个 double 返回的响应。但是这个响应是一个很长的散列,我不想弄乱我的规范文件。相反,我想将哈希写入单独的文件,并在我的规范中使用它 那么,最佳实践是什么?

Tan*_*ili 5

最好的做法是没有存根出整个哈希。当然,您的测试不需要每一行。您最好删除每个测试/上下文中每个测试所需的几行。

如果您必须存根整个 api,您可以在spec/support以下位置创建一个单独的模块:

# spec/support/api_stub.rb

module ApiStub
  def self.response
    {
      # hash
    }
  end
end
Run Code Online (Sandbox Code Playgroud)

由于该文件夹中的任何内容都会自动包含在内,因此您可以ApiStub.response在存根定义中使用。