Rspec терпит неудачу, потому что слишком мало аргументов при спасении ошибки - PullRequest
1 голос
/ 06 мая 2019

В спецификации системы я пытаюсь проверить правильность обработки тайм-аута базы данных.Когда это происходит, возникает новый TinyTds::Error.

Здесь мой контроллер (EMData обрабатывает соединение с БД)

class Json::ChartController < ApplicationController
  rescue_from TinyTds::Error, with: :connection_timed_out

  def index
    data = EMData.call(params) 

    respond_to do |format|
      format.json { render json: data }
    end
  end


  def connection_timed_out(_error)
    format.json { head :request_timeout }
  end
end

Здесь моя спецификация

context 'when the SQL Server connection times out' do
  let(:data_class) { class_spy('EMData').as_stubbed_const }

    it 'a feedback message is displayed' do
      allow(data_class).to receive(:call).and_raise(TinyTds::Error.new('message'))
      ...
      SUBMIT FORM VIA JS
      ...
      expect(page).to have_content("Some Content")
      end

Спецификация кажется довольно простой для меня.Однако, когда я его запускаю, я получаю

Запрос на обработку ошибок в приложении Rack {GET / json / chart /}

/app/controllers/json/chart_controller.rb:24:в `format '....

Ошибка / Ошибка: format.json {head: request_timeout}

 ArgumentError:
   too few arguments

Я что-то здесь не так?

1 Ответ

1 голос
/ 06 мая 2019

Вам не хватает respond_to do |format| в connection_timed_out(_error).Это должно быть как:

def connection_timed_out(_error)
  respond_to do |format|
    format.json { head :request_timeout }
  end
end
...