首先,我正在使用Interactor Gem。 (你应该检查一下,如果你没有。非常酷的lib)
假设我有一个Interactor :: Organizer如下:
class InitiateImport
include Interactor::Organizer
organize CreateImport, QueueImport
end
我还有两个Interactors如下:
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
组织者使用有效的param数据,这样它就会通过,我会从那里验证输出,但是我已经测试了这两个类了,我基本上只是两次行使相同的功能。我真的很想在可能的情况下验证方法调用和参数。
非常感谢任何帮助或建议。
答案 0 :(得分:1)
你无法测试参数,因为测试中设置了参数。测试必须测试应用程序代码,而不是测试本身。
你应该测试组织者是否正在做它想做的事情。
在您的情况下,您正在排队后台作业,您可以测试是否正在更改队列,例如使用Sidekiq:
InitiateImport.call(params: params)
assert_equal 0, QueueHandler.jobs.size
QueueHandler.perform_async(1, 2)
assert_equal 1, QueueHandler.jobs.size