繁体   English   中英

如何使用Minitest测试Interactor管理器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM