在我的助手模块中,我有:
def abc(url)
...
if request.env['HTTP_USER_AGENT']
do something
end
end
在我的规格文件中,我有:
describe "#abc" do
before(:each) do
@meth = :abc
helper.request.env['HTTP_USER_AGENT'] = "..."
end
it "should return the webstart jnlp file" do
@obj.send(@meth, "some_url").should ....
end
end
运行规范时出现此错误:
undefined local variable or method `request' for <ObjectWithDocHelperMixedIn:0x00000103b5a7d0>
我如何在规范中存入request.env ['...']?
谢谢。
如果使用rspec-rails,则可以在辅助测试中使用controller.request
。
嗯,您几乎无事可做:
before(:each) do
@meth = :abc
request.env['HTTP_USER_AGENT'] = "..."
end
我刚刚尝试了一下,通过了:
#in helper
def foo
request.env['HTTP_USER_AGENT']
end
#spec
it "foo" do
helper.request.env['HTTP_USER_AGENT'] = 'foo'
expect(helper.foo).to eq 'foo'
end
您可以通过执行以下操作来覆盖请求环境中设置的用户代理。
before(:each) do
@meth = :abc
helper.request.user_agent = 'something else'
end
然后,按照您的要求:
it "does stuff" do
expect(helper.send(@meth, "some_url")).to # ...
end
尝试一下:
stub(request).env { {"HTTP_USER_AGENT" => "Some String"} }
对于那些使用请求规范而不是控制器规范并想要设置request.env
的用户,可以这样做:
Rails.application.env_config["whatever"] = "whatever"
这将使request.env["whatever"]
在您的控制器中可用,并具有您在规格中赋予的值。