2013-05-03 30 views
1

路线:Rspec的:发动机路径帮手

Users::Engine.routes.draw do 
    get "test/step1", to: "test#step1", as: "step1" 
    get "test/step2", to: "test#step2", as: "step2" 
end 

constoller规格:

describe Users::Test do 
    it "sample" do 
    get :test2, use_route: "users" 
    response.should redirect_to users.step1_path 
    end 
end 

耙路线:

Routes for Users::Engine: 
    step1 GET /test/step1(.:format)     users/test#step1 
    step2 GET /test/step2(.:format)     users/test#step2 
.... 

我有错误:

Failure/Error: response.should redirect_to users.step1_path 
    NameError: 
     undefined local variable or method `users' for #<RSpec::Core::ExampleGroup::Nested_9::Nested_3:0xb7496f8> 

如何在控制器规格中使用像users.step1_path这样的引擎路径助手?

+0

是什么'$耙routes'给你? – weltschmerz 2013-05-03 13:51:47

+0

@Charles增加了'rake routes'输出。在视图或控制器中使用'user.step1_path'时,我没有错误。正好在控制器规格中使用这个助手。 – ole 2013-05-03 14:30:12

+0

好的,谢谢 - 为什么你调用'users.step1_path'而不是'step1_path'? – weltschmerz 2013-05-03 15:58:08

回答

2

您的RSpec路由需要设置为您的引擎路由集,而不是您的引擎控制器测试的默认全局Rails.routes。

describe Users::Test do 

    routes { Users::Engine.routes } 

    it "sample" do 
    get :test2 
    response.should redirect_to step1_path 
    end 

end 
2

我用Rails 4和RSpec 3.我得到它通过在规范的路线佣工的工作,像这样:

describe Users::Test do 

    include Users::Engine.routes.url_helpers 

    it "sample" do 
    get :test2 
    response.should redirect_to step1_path 
    end 

end 
+1

注意:“包含”而不是“包含” – 2015-10-15 12:50:38