ruby-on-rails - 使用 activeadmin 进行 Rails 测试

标签 ruby-on-rails testing activeadmin minitest

我在我的 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/

相关文章:

unit-testing - 在测试中覆盖 Go 方法

ruby-on-rails - rspec 在需要 stub 的私有(private)方法中测试私有(private)方法

flutter - 集成测试中的ListView(Flutter)

ruby-on-rails - 我应该用 Rspec 测试 Controller 助手还是 Controller 本身?

ruby-on-rails-4 - Rails omniauth-saml + devise + ADFS 问题

ruby-on-rails - ActiveAdmin 中的多态关联和 Formtastic

ruby-on-rails - activeadmin、has_many 和 ckeditor

ruby-on-rails - 如何在 Rails 中查找字符串长度?

html - rails : Using Bootstrap Input Style to Replace the built-in form_for method in Rails

ruby-on-rails - 使用 Capistrano 将 Rails 应用程序部署到多个 Web 服务器