【问题标题】:how to set user agent in rspec route assertions如何在 rspec 路由断言中设置用户代理
【发布时间】:2013-07-31 18:49:53
【问题描述】:

我正在尝试使用 rails-rpec 路由规范来测试基于不同用户代理的不同路由,但我找不到正确的方法或对象来存根。

我的方法是这样的:

require "spec_helper"

describe "articles routing" do
  describe "/articles/#slug" do

    it "routes to Articles#show" do
      get("/articles/fancy-slug").should route_to(controller: "articles",
                                                    action:     "show",
                                                    id:         "fancy-slug")
    end

    describe "when you have an iphone user agent" do
      before(:each) do
        # SOMETHING MAGICAL HAPPENS ALONG THE LINES OF THE LINE BELOW
        # request.user_agent = "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25"
      end

      it "routes to Mobile::Articles#show" do
        expect(get: "/articles/fancy-slug").to route_to(controller: "mobile_articles",
                                                      action:     "show",
                                                      id:         "fancy-slug")
      end
    end

  end
end

但是对于我的生活,我无法弄清楚如何存根请求、控制器或其他任何东西。大多数可用文档似乎都引用了get 语法的旧版本/过时版本。

【问题讨论】:

    标签: ruby-on-rails rspec rspec-rails


    【解决方案1】:

    我不确定这是否可行,但可以尝试以下方法:

    如果您查看source 中的RouteToMatcher,它只会解析控制器/动作对(以散列或controller#action 格式给出)以及与它们一起给出的任何其他参数,然后委托给@ 987654322@。但是该方法从您作为参数传递给route_to 的参数构建request 对象。因此,没有简单的方法可以从您的规范中访问请求对象。但是,要构建这个虚拟请求, 它调用

    ActionController::TestRequest.new

    所以你可以试试

    ActionController::TestRequest.any_instance.stub(:user_agent).
      and_return "Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25"
    

    【讨论】:

    • 非常接近!我的工作是:ActionDispatch::Request.any_instance.stubs(:user_agent).returns("Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_3 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B329 Safari/8536.25")
    • 太棒了!这种语法对我来说有点陌生。你介意我问你使用的是哪个版本的 rspec?
    • 我使用 mocha 存根,其语法略有不同。
    猜你喜欢
    • 2023-02-07
    • 2014-10-27
    • 1970-01-01
    • 2012-06-18
    • 2012-05-02
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多