我使用的是rspec,目前有一项测试路由的任务。 在我的路线:
get ':url' => 'article#get', constraints: lambda { |request|
Article.public.where(url: request.params["url"]).first
}
get ':url' => 'product#get', constraints: lambda { |request|
Product.get_publick_prod_by_url(request.params["url"])
}
并测试:
let!(:article) {Article.create(name: "qweqwe",
short_description: "sh",
description: "dscr",
public: true,
meta_title: "title",
meta_description: "meta-descr",
meta_keywords: "qwe",
url: "qweqwe")}
before(:each) do
Epk::Application.reload_routes!
end
it "should route to article" do
expect(get: article.url).to route_to(controller: 'article', action: 'get', url: "qweqwe")
end
由于一些奇怪的原因,测试没有通过。
输出 - No route matches "/qweqwe"
。
在手动测试时,所有代码都能正常运行,但我想为它设置测试..
答案 0 :(得分:0)
问题在于route_to方法,由于某些原因没有传递params。
在我的情况下,像“site.com/:url”这样的简单网址我可以用这种方式重写路由的约束:Article.find_published_by_url(request.path_info.split('/')[1])
,它完美无缺。