我正在構建一個Rails 4引擎,它提供了一些控制器和模型,然後將被我們的幾個應用程序使用。我正在編寫或編寫單元測試,並且在製作redirect_to
的控制器中遇到問題。Rails 4引擎控制器重定向失敗單元測試
在,我測試控制器,我有下列行爲:
def index
end
def new
@block = GlobalIpBlock.new
end
def create
@block = GlobalIpBlock.new(create_params)
if @block.save
flash[:success] = "The IP has been successfully blocked."
redirect_to action: 'index'
else
render 'new'
end
end
,並在控制器測試我有這兩項測試:
test "should get new block" do
get :new, use_route: :watchdog
assert_response :ok
assert_not_nil assigns(:block)
end
test "should create global ip block" do
assert_difference('GlobalIpBlock.count') do
post :create, block: {some_param: 'some value'}, use_route: :watchdog
end
assert_redirected_to :index
end
第一個測試通過,但第二拋出一個錯誤:
ActionController::UrlGenerationError: No route matches {:action=>"index"}
我沒有在引擎中創建路由和路由虛擬測試應用程序只安裝引擎。原因是我希望託管應用程序爲引擎的控制器/操作提供自己的路線。
不過,這似乎並不是問題,因爲動作new
的測試通過。此外,我曾嘗試做創建發動機的路線:
resources :global_ip_blocks, except: [:edit, :update]
但這並沒有幫助,也沒有做,在僞測試應用程序的途徑。
我猜測redirect_to
沒有找到路線的方式,從測試中的get/post中刪除use_route: :watchdog
失敗,但我該如何解決?是否有像全局的方式告訴單元測試use_route: :watchdog
?
,什麼時當我找到它時,我應該使用這個棄用通知嗎? ;-) – CJBrew 2015-03-08 11:13:33
@CJBrew:切換到使用新推薦的方式,在測試中設置一個'@ routes'實例變量。 – 2015-03-17 00:33:32
是的,我在這裏找到答案:http://www.relishapp.com/rspec/rspec-rails/v/3-2/docs/controller-specs/engine-routes-for-controllers – CJBrew 2015-03-17 19:26:45