RSpe c тестирование действия уничтожения с условным - PullRequest
0 голосов
/ 20 февраля 2020

Я пытаюсь проверить действие уничтожения, которое имеет условное выражение, оно работает нормально, если я просто называю бизнес без таких параметров:

def destroy
    if @message_rule.destroy
      Messages::Reclassifier.call
    end

Но если я делаю это так:

def destroy
    if @message_rule.destroy
      Messages::Reclassifier.call(allowed_params[:message])
    end

Это возвращает мне эту ошибку:

Failures:

  1) MessageRulesController#destroy When the message_rule has been destroyed classifies the messages
     Failure/Error: expect(Messages::Reclassifier).to have_received(:call)

       (Messages::Reclassifier (class)).call(*(any args))
           expected: 1 time with any arguments
           received: 0 times with any arguments
     # ./spec/controllers/message_rules_controller_spec.rb:108:in `block (4 levels) in <top (required)>'

Это спец. c:

describe '#destroy' do
    let(:message_rule) { build_stubbed(:message_rule) }

    before do
      allow(Messages::Reclassifier).to receive(:call)

      allow(MessageRule).to receive(:find).
        with(message_rule.id.to_s).
        and_return(message_rule)
    end

    subject(:destroy) { delete :destroy, params: { id: message_rule.id } }

    context 'When the message_rule has been destroyed' do
      before { allow(message_rule).to receive(:destroy).and_return(true) }

      it 'classifies the messages' do
        destroy

        expect(Messages::Reclassifier).to have_received(:call)
      end
    end

    context 'When the message_rule couldn\'t be destroyed' do
      before { allow(message_rule).to receive(:destroy).and_return(false) }

      it 'does not reclassify the messages' do
        destroy

        expect(Messages::Reclassifier).not_to have_received(:call)
      end
    end
  end

Что-то не так, что я делаю в спецификации? Я неопытный с RSpe c, поэтому мне трудно понять эту ошибку

1 Ответ

1 голос
/ 20 февраля 2020

Ошибка указывает, что Rspe c ожидал Messages::Reclassifier вызова метода call, но метод не был вызван. Это означает, что что-то препятствует вызову метода. Кажется, вы правильно настроили заглушку метода.

Так как вы заглушаете Messages::Reclassifier#call без параметра параметра, для Rspe c не должно иметь значения, передаете ли вы параметр в * 1006 или нет. *. Но было бы важно, если бы параметр allowed_params[:message] вызывал что-то вроде исключения.

Можете ли вы предоставить весь класс контроллера или хотя бы весь код, относящийся к действию "destroy"?

...