我正在测试一些调用aws-sdk(v2)的代码。许多方法通过在返回值中设置is_truncated
属性来进行分页。然后在返回中使用其他值(通常为marker
)并将其传递给下一个调用。因此,用法通常类似于:
values = []
rv = client.do_thing
values.concat rv.things
while rv.is_truncated
rv = client.do_thing(next_marker: rv.marker)
values.concat rv.things
end
我的问题是 - 我想instance_double
AWS客户端。但是,我无法找到一种说法"期望第一次调用没有参数并返回this
。然后,第二个调用将包含these
个参数并返回that
。"我知道我可以通过将两个预期rv
&#39置于同一个and_returns()
调用中来设置两个调用的返回值。但是,我想测试第一个marker
中的rv
是否会在下次调用中作为next_marker
传递。
我该怎么做?
答案 0 :(得分:1)
您可以在RSpec mocks
中使用Message Order
功能:
RSpec.describe "Constraining order" do
it "passes when the messages are received in declared order" do
collaborator_1 = double("Collaborator 1")
collaborator_2 = double("Collaborator 2")
expect(collaborator_1).to receive(:step_1).ordered
expect(collaborator_2).to receive(:step_2).ordered
expect(collaborator_1).to receive(:step_3).ordered
collaborator_1.step_1
collaborator_2.step_2
collaborator_1.step_3
end
end