Rails测试ActiveAdmin batch_action

时间:2016-02-16 22:06:00

标签: ruby-on-rails activeadmin

我正在使用ActiveAdmin构建一个Rails应用程序来处理管理方面 我在管理员控制器中定义了一些batch_action,现在我尝试进行一些测试以确保它正常工作 但是,我没有找到任何有关这方面的信息:我一直在直接查看ActiveAdmin的源代码而没有任何运气。

以下是我的代码摘录

# Admin file
ActiveAdmin.register Event do
  batch_action :toggle_online do |ids|
    Event.find(ids).each { |item| item.toggle! :online }
    redirect_to :back, notice: t('active_admin.batch_actions.flash')
  end
end


# Test file
require 'test_helper'
module Admin
  class EventsControllerTest < ActionController::TestCase
    test 'should test toggle_online batch action' do
      post :batch_action, batch_action: 'toggle_online',  collection_selection: [@event.id.to_s] # not sure about this line
      assert_not assigns(:event).online? # assigns(:event) is nil
      assert_equal I18n.t('active_admin.batch_actions.flash'), flash[:notice]
      assert_redirected_to admin_events_path
    end
  end
end

感谢您的帮助!

我的项目
- Rails 4.2.5.1
- Ruby 2.2.2
- ActiveAdmin 1.0.0pre2
- Rails Minitest(不是rspec)

1 个答案:

答案 0 :(得分:0)

我终于找到了解决方案:assigns(:event)是零,因为它在循环内部 这是我做的:

test 'should test toggle_online batch action' do
    post :batch_action, batch_action: 'toggle_online', collection_selection: [@event.id]
    @event.reload # This is important
    assert_not @event.online?
    assert_equal I18n.t('active_admin.batch_actions.flash'), flash[:notice]
    assert_redirected_to admin_events_path
end