2015-04-02 69 views
3

我在我的Rails項目上使用activeadmin,我想知道如何對它進行測試。我在網上查了一下,但沒有關於它的文檔。 我有一個設置資源,我禁用了創建一個新的或刪除它的可能性。使用activeadmin進行rails測試

我想知道如何測試這些路線不存在或另一種方式來確保它無法訪問。 在我實際的,雖然我試圖斷言這個頁面是404,但測試似乎拋出此錯誤(這是我試圖測試!!!):ActionController::UrlGenerationError: No route matches {:action=>"new", :controller=>"admin/settings"}

我不使用Rspec的,但來自Rails的Minitest
感謝您的幫助!

我activeadmin文件

ActiveAdmin.register Setting do 
    actions :all, except: [:new, :destroy] 
    … 
end 

我的測試

require 'test_helper' 

class Admin::SettingsControllerTest < ActionController::TestCase 
    include Devise::TestHelpers 
    setup :initialize_settings 

    test 'should throw 404 if trying to access new action' do 
    get :new 
    assert_response 404 
    end 

    def initialize_settings 
    sign_in users(:one) 
    end 
end 

我的項目

  • 的Rails 4.2
  • 的Ruby 2.2.0
  • MINITEST(NOT RSPEC)
+0

如果您從該行刪除:new操作:all,但:[:new,:destroy]您仍然得到相同的錯誤嗎?你有沒有試過,而不是assert_response ...做這樣的值(迴應).must_respond_with 404 – MilesStanfield 2015-08-13 04:55:46

回答

0

你需要什麼是集成測試,特別是那些將測試路線,或者在你的情況,如果沒有路線。不存在的行爲將提高ActionController::RoutingError

# test/routes/admin/settings_test.rb 
require 'test_helper' 

class Admin::SettingsRouteTest < ActionDispatch::IntegrationTest 
    test 'create' do 
    assert_raises(ActionController::RoutingError) do 
     post '/admin/settings' 
    end 
    end 

    test 'destroy' do 
    assert_raises(ActionController::RoutingError) do 
     delete '/admin/settings/1' 
    end 
    end 

    test 'edit' do 
    assert_routing '/admin/settings/1/edit', controller: 'admin/settings', action: 'edit', id: '1' 
    end 

    test 'index' do 
    assert_routing '/admin/settings', controller: 'admin/settings', action: 'index' 
    end 

    test 'new' do 
    assert_routing '/admin/settings/new', controller: 'admin/settings', action: 'show', id: 'new' 
    end 

    test 'update' do 
    assert_routing({ method: 'patch', path: '/admin/settings/1' }, { controller: 'admin/settings', action: 'update', id: '1' }) 
    end 
end 

注意,new行動回落到一個show行動「新」的ID。

觀察:如果要刪除:new操作,您可能也想要刪除:create操作,以便通過該路由不能創建任何記錄。

# app/admin/setting.rb 
ActiveAdmin.register Setting do 
    actions :all, except: [:new, :create, :destroy] 
end 
+0

其實,這篇文章解決了Rails 4的問題:http://stackoverflow.com/a/21662764/3700317 – anthony 2015-10-03 18:10:54