我们如何使用rspec测试交互组织者?

时间:2017-05-15 16:42:14

标签: ruby-on-rails rspec interactors

我想测试下面的组织者交互器,调用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?

2 个答案:

答案 0 :(得分:2)

我认为我们需要在不执行所包含的交互的情况下测试交互器组织器以查找包含的交互器。我能够找到一种方式存根并用下面的行测试组织者

要求存根:

  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变量已满足我的要求。

答案 1 :(得分:2)

您可以测试它们的名称和顺序:

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