活动管理员中的RSpec collection_action

问题描述

在我的Rails 6应用中,我想在ActiveAdmin设置中编写collection_action以下的规范:

admin/users.rb

  collection_action :import_csv,method: :get do
    file = ::AdminLogData::CsvAdminLogGenerator.new.call

    send_data file.encode('UTF-8'),type: 'text/csv; charset=UTF-8; header=present',disposition: 'attachment; filename=admin_logs.csv'
  end

此方法负责创建管理日志。为此,我编写了规范:

describe Admin::UsersController,type: :controller do
  include Devise::Test::ControllerHelpers

  before { sign_in admin }

  let!(:admin) { create(:admin_user) }

  describe '#import_csv' do
    let(:csv_admin_log_generator_instance) { instance_double(::AdminLogData::CsvAdminLogGenerator) }

    before(:each) do
      allow(::AdminLogData::CsvAdminLogGenerator).to receive(:new) { csv_admin_log_generator_instance }
      allow(csv_admin_log_generator_instance).to receive(:call)
      get :index
    end

    it 'accepts send_data' do
      get :import_csv
      expect(csv_admin_log_generator_instance).to receive(send_data)
    end
  end

但是我遇到一个错误:

  1) Admin::UsersController#import_csv accepts send_data
     Failure/Error:
       send_data file.encode('UTF-8'),disposition: 'attachment; filename=admin_logs.csv'

     NoMethodError:
       undefined method `encode' for nil:NilClass

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)