[英]How to test an Interactor Organizer with Minitest
首先,我正在使用Interactor Gem 。 (如果没有的话,应该检查一下。很酷的lib)
假设我有一个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年前发现了这个问题/答案,但是并没有为我提供太多的清晰度。 也许在里面,我只是想念什么?
我还意识到,我可以使用有效的参数数据call
组织者,使其通过,然后从那里验证输出,但是我已经对这两个类进行了测试,基本上我将两次行使相同的功能。 如果可能的话,我真的很想验证方法调用和参数。
任何帮助或建议,将不胜感激。
您无法测试参数,因为已在测试中设置了参数。 测试必须测试应用程序代码,而不是测试本身。
您应该测试组织者是否正在按计划进行。
对于您的情况,您正在排队后台作业,可以使用Sidekiq例如测试队列是否已更改:
InitiateImport.call(params: params)
assert_equal 0, QueueHandler.jobs.size
QueueHandler.perform_async(1, 2)
assert_equal 1, QueueHandler.jobs.size
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.