我有一个帮助规范说明如下:
expect(request).to receive(:remote_ip).and_return('1.2.3.4')
运行测试,他们通过,但发出警告:
警告::remote_ip
上设置了nil
的预期值。要允许nil
的期望并取消此消息,请将config.allow_expectations_on_nil
设置为true
。要禁止nil
的期望,请将config.allow_expectations_on_nil
设置为false
。
我尝试过使用helper.request和controller.request,但测试失败了:undefined method remote_ip for nil:NilClass
你如何模拟你的IP地址?
答案 0 :(得分:2)
您可以对包含"REMOTE_ADDR"
键的方法参数使用env键:
post path, params: params, env: { "REMOTE_ADDR": your_desired_ip }
答案 1 :(得分:1)
您可以使用by(BOE.1Data$Distance.cm, BOE.1Data$Day, mean)
在帮助程序中设置remote_ip
。
示例强>
帮助文件:
controller.request.remote_addr = '1.2.3.4'
规范文件:
module ApplicationHelper
def ip
request.remote_ip
end
end
帮助器规格混合在require 'rails_helper'
RSpec.describe ApplicationHelper, type: :helper do
describe '#ip' do
it 'returns the IP' do
controller.request.remote_addr = '1.2.3.4'
expect(helper.ip).to eql '1.2.3.4'
end
end
end
中。这提供了一个ActionView::TestCase::Behavior
对象,它与指定的helper模块以及helper
混合在一起。 (在这种情况下,规范的模块是ApplicationHelper
)。
执行辅助规范时,将ApplicationHelper
对象设置为controller
。此测试控制器上的ActionView::TestCase::TestController
对象为request
。
在测试请求上使用ActionController::TestRequest
setter,在#remote_addr=
实例变量中设置"REMOTE_ADDR"
键。 @env
使用remote_ip
实例变量中的相同"REMOTE_ADDR"
键来检索IP。
答案 2 :(得分:1)
before do
request.env['REMOTE_ADDR'] = '59.152.62.114'
end
这将解决您的问题。但是,如果您在控制器的私有方法中使用了ip,则可以检出this link: