Rspec send_data test fails

It seems I can not pass this test, and I do not understand why.

controller_spec.rb:

require 'rails_helper' RSpec.describe QuotationRequestsController, type: :controller do describe "GET download" do it "streams the sample text as a text file" do #setup quotation_request = create(:quotation_request) file_options = {filename: "#{quotation_request.id}-#{quotation_request.client.name.parameterize}.txt", type: 'plain/text', disposition: 'attachment'} #exercise get :download, id: quotation_request #verification expect(@controller).to receive(:send_data).with(file_options) {@controller.render nothing: true} end end end 

controller:

 def download @quotation_request = QuotationRequest.find(params[:id]) send_data @quotation_request.sample_text, { filename: @quotation_request.sample_text_file, type: "text/plain", disposition: "attachment" } end 

Test output:

 1) QuotationRequestsController GET download streams the sample text as a text file Failure/Error: expect(@controller).to receive(:send_data).with(file_options) { @controller.render nothing: true } (# <QuotationRequestsController:0x007ff35f926058>).send_data({ :filename=>"1-peter-johnson.txt", :type=>"plain/text", :disposition=>"attachment" }) expected: 1 time with arguments: ({ :filename=>"1-peter-johnson.txt", :type=>"plain/text", :disposition=>"attachment" }) received: 0 times # ./spec/controllers/quotation_requests_controller_spec.rb:380:in `block (3 levels) in <top (required)>' # -e:1:in `<main>' 
+7
ruby-on-rails rspec
source share
3 answers

You must pass 2 arguments expect(@controller).to receive(:send_data).with(quotation_request.sample_text, file_options) {@controller.render nothing: true}

+4
source share
  #exercise get :download, id: quotation_request #verification expect(@controller).to receive(:send_data).with(file_options) {@controller.render nothing: true} 

This is back. Waiting should appear before a method call.

+3
source share

You write the following:

  • Get file
  • Mock file

But the correct case is inverted:

  • Mock file
  • Get file

try executing (using before ):

 require 'rails_helper' RSpec.describe QuotationRequestsController, type: :controller do describe "GET download" do let(:quotation_request) { create(:quotation_request) } let(:file_options) { {filename: "#{quotation_request.id}-#{quotation_request.client.name.parameterize}.txt", type: 'plain/text', disposition: 'attachment'} } before do expect(@controller).to receive(:send_data) .with(file_options) { @controller.render nothing: true } end it "streams the sample text as a text file" do get :download, id: quotation_request end end end 
+1
source share

All Articles