【问题标题】:Rspec: how to spec request.env in a helper spec?Rspec:如何在辅助规范中指定 request.env?
【发布时间】:2012-04-12 21:47:25
【问题描述】:

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

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


    【解决方案1】:

    如果您使用的是rspec-rails,您也许可以在您的辅助测试中使用controller.request

    【讨论】:

      【解决方案2】:

      好吧,你几乎无事可做:

      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
      

      【讨论】:

      • 我在控制器规范中这样做了……但从未在辅助规范中尝试过。
      • 感谢您的回复。是的,我之前也尝试过,但它在帮助规范中不起作用(至少在我的情况下)。
      • 一个简单的解决方法是将条件提取到帮助程序中的方法并存根这些方法
      【解决方案3】:

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

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

      然后,在您的规范中:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:

          试试这个:

          stub(request).env { {"HTTP_USER_AGENT" =&gt; "Some String"} }

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-10-24
            • 1970-01-01
            • 2015-12-12
            • 2017-06-02
            • 2014-03-24
            • 2020-01-27
            • 1970-01-01
            相关资源
            最近更新 更多