我在我的 Rails 项目上使用 activeadmin,我想知道如何对其进行测试。我在互联网上查看过,但没有关于它的文档。 我有一个设置资源,我禁用了创建新资源或删除它的可能性。
我想知道如何测试这些路由不存在或其他方法来确保它无法访问。
实际上,虽然我试图断言此页面为 404,但测试似乎抛出此错误(这是我尝试测试的!!!):ActionController::UrlGenerationError:没有路由匹配 {: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(不是 RSPEC)
最佳答案
您需要的是集成测试,特别是那些将测试路由的测试,或者在您的情况下,没有路由。不存在的操作将引发 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
操作回退到 ID 为“new”的 show
操作。
观察:如果您要删除 :new
操作,您可能打算也删除 :create
操作,这样就无法通过该路径创建任何记录。
# app/admin/setting.rb
ActiveAdmin.register Setting do
actions :all, except: [:new, :create, :destroy]
end
关于ruby-on-rails - 使用 activeadmin 进行 Rails 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29416096/