【发布时间】:2020-09-07 09:48:32
【问题描述】:
我有一个带有 ActiveAdmin 面板的 Rails 6 应用程序,该应用程序具有使用管理活动日志创建 CSV 文件的方法。我想为该操作创建 RSpec 测试,如下所示:
admin/users_spec.rb
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 do
allow(::AdminLogData::CsvAdminLogGenerator).to receive(:new).and_return(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
end
但它给了我一个错误:
1) Admin::UsersController#import_csv accepts send_data
Failure/Error:
send_data file.encode('UTF-8'), type: 'text/csv; charset=UTF-8; header=present',
disposition: 'attachment; filename=admin_logs.csv'
NoMethodError:
undefined method `encode' for nil:NilClass
这是一个我想测试的方法(它的行为就像一个控制器)。
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
【问题讨论】:
标签: ruby-on-rails ruby rspec