Как мы тестируем организаторы интеракторов, используя rspec?
Я хочу проверить ниже органайзер организатора для вызова 2 указанных интеракторов без выполнения кода вызывающих интеракторов ('SaveRecord, PushToService').
class Create
include Interactor::Organizer
organize SaveRecord, PushToService
end
Я нашел несколько примеров, где был проверен общий результат всей логики взаимодействия (запись должна быть сохранена и отправлена в другой сервис). Но я не хочу выполнять логику другого интерактора, так как они будут проверены как часть их отдельных спецификаций.
1. Is it possible to do so?
2. Which way of testing(testing the overall result/testing only this particular
organizer interactor behavior) is a better practise?
3 ответа
Я считаю, что нам нужно протестировать органайзер интерактора на наличие включенных интеракторов без выполнения включенных интеракторов. Я могу найти заглушку и проверить органайзер с помощью строк ниже
Для заглушки:
allow(SaveRecord).to receive(:call!) { :success }
allow(PushToService).to receive(:call!) { :success }
Тестировать:
it { expect(interactor).to be_kind_of(Interactor::Organizer) }
it { expect(described_class.organized).to eq([SaveRecord, PushToService]) }
Найденный call! method & organized variable
из исходных файлов организатора интерактора, где он пытается вызвать и использовать внутри. Заглушка call!
метод и тестирование organized
Переменная выполнила мое требование.
Вы можете протестировать, как они называются и в порядке:
it 'calls the interactors' do
expect(SaveRecord).to receive(:call!).ordered
expect(PushToService).to receive(:call!).ordered
described_class.call
end
См.: https://relishapp.com/rspec/rspec-mocks/docs/setting-constraints/message-order
Просто повторяю ответ user524740 .
Тестировать:
it { expect(interactor).to be_kind_of(Interactor::Organizer) } it { expect(described_class.organized).to eq([SaveRecord, PushToService]) }
interactor
в данном случае это экземпляр класса Interactor или в синтаксисе Rspec:
let(:interactor) { described_class.new }