Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用activeadmin进行Rails测试_Ruby On Rails_Testing_Activeadmin_Minitest - Fatal编程技术网

Ruby on rails 使用activeadmin进行Rails测试

Ruby on rails 使用activeadmin进行Rails测试,ruby-on-rails,testing,activeadmin,minitest,Ruby On Rails,Testing,Activeadmin,Minitest,我正在Rails项目中使用activeadmin,我想知道如何对其进行测试。我在网上查过了,但并没有相关的文档。 我有一个设置资源,我禁用了创建新资源或删除它的可能性 我想知道如何测试这些路由不存在,或者以另一种方式确保它不可访问。 在我的实际操作中,虽然我试图将此页面断言为404,但测试似乎抛出了此错误(这就是我试图测试的!!!):ActionController::UrlGenerationError:没有路由匹配{:action=>“new”,:controller=>“admin/set

我正在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
我的测试

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
需要“测试助手”
类Admin::SettingsControllerTest
我的项目

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
  • 轨道4.2
  • Ruby 2.2.0
  • 小型测试(非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 actions:all,除了:[:new,:destroy]之外,是否仍会收到相同的错误?你有没有试过,而不是断言你的回答。。。执行类似于此值的操作(响应)。必须用404响应实际上,这篇文章解决了Rails 4的问题: