使用Activeadmin的Rails测试

3
我正在我的Rails项目中使用activeadmin,想知道如何对其进行测试。我在互联网上查找了一些资料,但没有相关文档。 我有一个设置资源,并禁用了创建新资源或删除它的可能性。
我想知道如何测试这些路由是否存在,或者有其他方法确保它无法访问。 在我的实际尝试中,我试图断言此页面为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(不是RSpec)

(注:该段为原文,无需翻译)

如果你从这行代码 actions :all, except: [:new, :destroy] 中移除 :new,你是否仍然会得到相同的错误?你尝试过使用 value(response).must_respond_with 404 替代 assert_response 吗? - MilesStanfield
1个回答

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为'new'的show操作。
观察:如果您要删除:new操作,则可能打算同时删除:create操作,以便不通过该路由创建任何记录。
# app/admin/setting.rb
ActiveAdmin.register Setting do
  actions :all, except: [:new, :create, :destroy]
end

实际上,这篇帖子解决了Rails 4的问题:https://dev59.com/L2445IYBdhLWcg3wirAj#21662764 - anthony

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接