我在我的Rails项目中使用activeadmin,我想知道如何对它进行测试。我查看了互联网,但没有关于它的文档。 我有一个设置资源,我禁用了创建新资源或删除它的可能性。
我想知道如何测试这些路线不存在或以其他方式确保它无法访问。
在我的实际,虽然我试图断言这个页面是一个404,但测试似乎抛出这个错误(这是我试图测试!!!):ActionController::UrlGenerationError: No route matches {:action=>"new", :controller=>"admin/settings"}
我不使用Rails中的Rspec而是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
我的项目:
答案 0 :(得分: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
操作会回退到ID为&#39; new&#39;的show
操作。
观察:如果要删除:new
操作,您可能还要删除:create
操作,以便不能通过该路由创建任何记录。
# app/admin/setting.rb
ActiveAdmin.register Setting do
actions :all, except: [:new, :create, :destroy]
end