我有一个调用方法来存根的服务。但它总是有这个错误:
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,那么它返回调用它的结果”。
所以基本上问题是你的模拟响应call
,stub
方法在进入块之前调用它。您可以通过将模拟包装在丢弃参数的 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