最小如何解决模拟方法:调用期望0个参数,得到1



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

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

我做错了什么?由于

总的来说你写的是对的,但是你的方法名call碰到了边界。

您可以在stub方法的文档中看到。

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

所以基本上问题是你的模拟响应call,stub方法在进入块之前调用它。您可以通过将mock包装在丢弃参数的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

相关内容

  • 没有找到相关文章

最新更新