Rails,模块方法中的模拟对象

Rails, mock object in module method

我一直在尝试在 rails 中测试我的辅助模块,并且在其中一种方法中,我调用了 rails request 对象。但是好像不对,而且不能正常使用

如何以正确的方式模拟 request 对象?谢谢。

示例:

module MyHelper
  def get_header
    request.headers['My-header']
  end
end

测试看起来像。

RSpec.describe MyHelper do
  include MyHelper

  it 'should fetch header' do
    allow(:request).to receive(:headers).and_return(headers: { 'My-header' => 'my-header-value' })
    expect(get_header).to eq 'my-header-value'
  end
end

测试错误

 Failure/Error: allow(:request).to receive(:headers).and_return(headers: { 'My-header' => 'my-header-value' })

     TypeError:
       can't define singleton

有错字。应该是 request 而不是 :request

尝试

allow(request).to receive(:headers).and_return(headers: { 'My-header' => 'my-header-value' })

the request object is nil

您存根的方法将 return headers: { 'My-header' => 'my-header-value' }。但是您试图在不访问密钥 :headers.

的情况下进行访问

尝试以下方法:

it 'should fetch header' do
  allow(request).to receive(:headers).and_return('My-header' => 'my-header-value')
  expect(get_headers).to eq 'my-header-value'
end