mocking - Minitest 如何解决模拟方法:调用需要 0 个参数,得到 1

我有一个调用方法来存根的服务。但它总是有这个错误:

SomeTest#test_1:
ArgumentError: mocked method :call expects 0 arguments, got 1
    test.rb:17:in `block in test_1'
    test.rb:16:in `test_1'

这是代码:

require 'minitest/autorun'

class SomeService
  def initialize(headers = {})
  end

  def call
  end
end

class SomeTest < Minitest::Test
  def test_1
    mock = Minitest::Mock.new
    mock.expect :call, nil

    SomeService.stub :new, mock do
      SomeService.new({}).call
    end
  end
end

我做错了什么?谢谢

回答1

一般来说,您写的内容是正确的,但是您使用方法名称 call 遇到了问题。

正如您在 https://www.rubydoc.info/gems/minitest/4.2.0/Object:stub 方法的文档中看到的那样。

“如果 val_or_callable 响应 #call,那么它返回调用它的结果”。

所以基本上问题是你的模拟响应callstub方法在进入块之前调用它。您可以通过将模拟包装在丢弃参数的 lambda 中来解决它。

require 'minitest/autorun'

class SomeService
  def initialize(headers = {})
  end

  def call
  end
end

class SomeTest < Minitest::Test
  def test_1
    mock = Minitest::Mock.new
    mock.expect :call, nil

    SomeService.stub :new, ->(_args) { mock } do
      SomeService.new({}).call
    end
  end
end

相似文章

go - Go DNS 问题 TCP 使用 UDP 传输正常

我已经尝试了我能想到的一切,但我正在碰壁。我想知道是否有人能够指出我正确的方向或可能发现问题?我有一个go来编写我自己的DNS服务器有几个原因,主要是学习经验。有几点要提:我正在使用Go使用"gopa...

list - 如何优化以下功能

我在使用以下功能时遇到瓶颈问题。处理lists的list花费的时间太长。我将要详细介绍的list有数百万个lists(最多可以容纳近40M个lists)。该函数遍历lists的list并且对于其第10...

最新文章