Я пишу модульный тест rspe c для моего контроллера. Вот мой код:
report_base_controller.rb
def send_data_to_report
params[:user_role_code] = @auth_logic.current_role.code
report_url = @report_logic.report_url(params)
res = @request_logic.get(report_url)
check_request_code(res.code.to_i, params)
filename = params[:call_docurain_flag].to_i.zero? ? '' : "buildee_v2.#{Constants::REPORT_OUT_TYPE[params[:file_code].to_i]}"
if params[:file_code].to_i == 2
send_data(res.body, filename: filename, status: res.code, disposition: 'inline')
else
send_data(res.body, filename: filename, status: res.code)
end
end
report_base_controller_spe c .rb
describe "send_data_to_report 【帳票】出面及支払内訳書(請負)" do
let(:report_setting) { create(:report_setting, report_code: '22',
unit_code: 1, report_name: '【帳票】出面及支払内訳書(請負)') }
let(:dummy_auth_logic) { double('dummy_auth_logic') }
before do
controller.instance_variable_set(:@auth_logic, dummy_auth_logic)
controller.instance_variable_set(:@request_logic, dummy_request_logic)
allow(dummy_auth_logic).to receive_message_chain(:current_role, :code).and_return(Roles::USER_ROLES[:PRIME])
allow(dummy_report_logic).to receive(:report_url).and_return('')
allow(dummy_http_response).to receive(:code).and_return(200)
allow(dummy_http_response).to receive(:body).and_return('abc')
allow(dummy_request_logic).to receive(:get).and_return(dummy_http_response)
end
it "Case 1" do
expect(controller.send(:send_data_to_report)).to eq(true)
end
end
Но когда я запускаю тест, я получил сообщение
Failure/Error: send_data(res.body, filename: filename, status: res.code)
NoMethodError:
# undefined method `content_type=' for nil:NilClass
# ./app/controllers/api/private/reports/report_base_controller.rb:35:in `send_data_to_report'
Я не могу понять, что content_type
принадлежит какому объекту, поэтому я могу не решить проблему. Пожалуйста, помогите мне решить эту проблему. Спасибо