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
我一直在尝试在 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