Rspec: how to spec request.env in a helper spec?

时光总嘲笑我的痴心妄想 提交于 2019-12-09 07:53:48

问题


In my helper module, I have:

def abc(url)
  ...
  if request.env['HTTP_USER_AGENT']
    do something
  end
end

In my spec file, I have:

  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

When I run the spec I have this error:

undefined local variable or method `request' for <ObjectWithDocHelperMixedIn:0x00000103b5a7d0>

How do I stub for request.env['...'] in my specs?

Thanks.


回答1:


If you're using rspec-rails, you might be able to use controller.request in your helper tests.




回答2:


Well, you've almost nothing to do:

before(:each) do
  @meth = :abc

  request.env['HTTP_USER_AGENT'] = "..."
end

I just gave this another try and this passes:

#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



回答3:


You can override user-agent set in the request env by doing the following.

before(:each) do
  @meth = :abc
  helper.request.user_agent = 'something else'
end

Then, in your spec:

it "does stuff" do
  expect(helper.send(@meth, "some_url")).to # ...
end



回答4:


Try this:

stub(request).env { {"HTTP_USER_AGENT" => "Some String"} }




回答5:


for those who use request specs instead of controller specs and want to set request.env can do it like this:

Rails.application.env_config["whatever"] = "whatever"

this will make request.env["whatever"] available in your controllers with value you gave it in your specs.



来源:https://stackoverflow.com/questions/10132363/rspec-how-to-spec-request-env-in-a-helper-spec

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!