rspec:带有约束的测试路由

时间:2014-11-14 17:13:10

标签: ruby-on-rails rspec routing

我使用的是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"

在手动测试时,所有代码都能正常运行,但我想为它设置测试..

1 个答案:

答案 0 :(得分:0)

问题在于route_to方法,由于某些原因没有传递params。 在我的情况下,像“site.com/:url”这样的简单网址我可以用这种方式重写路由的约束:Article.find_published_by_url(request.path_info.split('/')[1]),它完美无缺。