Rspec:如何在帮助程序规范中指定request.env?

问题描述 投票:20回答:5

在我的助手模块中,我有:

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 ['...']?

谢谢。

ruby-on-rails rspec request user-agent specifications
5个回答
15
投票

如果使用rspec-rails,则可以在辅助测试中使用controller.request


11
投票

嗯,您几乎无事可做:

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

5
投票

您可以通过执行以下操作来覆盖请求环境中设置的用户代理。

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

然后,按照您的要求:

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

1
投票

尝试一下:

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


0
投票

对于那些使用请求规范而不是控制器规范并想要设置request.env的用户,可以这样做:

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

这将使request.env["whatever"]在您的控制器中可用,并具有您在规格中赋予的值。

© www.soinside.com 2019 - 2024. All rights reserved.