我正在尝试使用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
语法的旧/过时版本。
答案 0 :(得分:0)
我不确定这会起作用,但这里有一些尝试:
如果查看RouteToMatcher
的{{3}},它只会解析一个控制器/操作对(以散列或controller#action
格式给出)以及随之给出的任何其他参数他们然后委托给source。但是该方法将您传入的参数中的request
对象构建为route_to
的参数。因此,没有简单的方法可以从您的规范访问请求对象。但是,要构建此虚拟请求,
它叫
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"