gpt4 book ai didi

ruby-on-rails - Minitest::Mock#expect 没有特定顺序?

转载 作者:数据小太阳 更新时间:2023-10-29 08:56:56 25 4
gpt4 key购买 nike

假设我有一个类:

class Foo
def process
MyModel.where(id: [1,3,5,7]).each do |my_model|
ExternalService.dispatch(my_modal.id)
end
end
end

我想测试一下:

class FooTest < ActiveSupport::TestCase
def process_test
external_service_mock = MiniTest::Mock.new
[1,3,5,7].each do |id|
external_service_mock.expect(:call, true, id)
end

ExternalService.stub(:dispatch, events_mock) do
Foo.new.process
end
external_service_mock.verify
end
end

但是,#expect 强制执行以下调用的顺序与调用 #expect 的顺序相同。这对我不利,因为我没有信心,数据库将以什么顺序返回结果。

我该如何解决这个问题?有没有办法期待没有特定顺序的调用?

最佳答案

尝试使用集合

require 'set'
xs = Set[3,5,7,9]

@cat = Minitest::Mock.new
@cat.expect :meow?, true, [xs]
@cat.meow? 7 # => ok...
@cat.expect :meow?, true, [xs]
@cat.meow? 4 # => boom!

或者,一个不太具体的选项:

鉴于模拟返回的值不是参数值的函数,也许您可​​以在设置模拟时为参数指定一个类。下面是一只猫期望 meow? 用任意整数调用四次的示例。

@cat = Minitest::Mock.new
4.times { @cat.expect(:meow?, true, [Integer]) }

# Yep, I can meow thrice.
@cat.meow? 3 # => true

# Mope, I can't meow a potato number of times.
@cat.meow? "potato" # => MockExpectationError

关于ruby-on-rails - Minitest::Mock#expect 没有特定顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51098675/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com