我有一个调用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