2013-05-03 63 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