【发布时间】:2015-04-02 12:52:03
【问题描述】:
首先,我使用的是Interactor Gem。 (如果你还没有,你应该检查一下。非常酷的库)
假设我有一个 Interactor::Organizer,如下所示:
class InitiateImport
include Interactor::Organizer
organize CreateImport, QueueImport
end
我还有两个交互器如下:
class CreateImport
include Interactor
def call
import = Import.create()
if import
context.import = import
else
context.fail!(message: 'import failed!')
end
end
end
和
class QueueImport
include Interactor
def call
unless QueueHandler.perform_later(context.import.id)
context.fail!(message: 'Queue broke!')
end
end
end
大问题 - 我如何使用 Minitest 测试 organize 是否在 InitiateImport 上被调用,参数为 [CreateImport, QueueImport]
assert_send 将让我验证 organize 正在被调用,但它不会让我验证我传递了哪些参数。像这样的:
class InitiateImportTest < Minitest::Test
def test_organize_called
InitiateImport.new(file: file)
assert_send([InitiateImport, :organize, [CreateImport, QueueImport]])
end
end
我找到了将近 3 年前的this 问题/答案,但它并没有让我很清楚。也许它在那里,我只是错过了什么?
我也意识到我可以 call 组织者使用有效的参数数据使其通过并验证那里的输出,但是我已经测试了这两个类,我基本上只是在锻炼相同的功能两次。如果可能的话,我真的很想验证方法调用和参数。
任何帮助或建议将不胜感激。
【问题讨论】:
-
嘿!我认为
spy可能会帮助您实现您正在寻找的东西,请查看我的另一个answer。希望有帮助! -
谢谢!我会调查并报告。
-
是的...你这很长...你应该关注的事情在第一个代码清单中用数字
(2)和(3)标记。 -
我突然想到,也许我应该在组织者测试中设置主要测试预期,而不用担心测试两个交互器,因为这只是“实现细节”
标签: ruby-on-rails ruby ruby-on-rails-4 testing minitest