如何使用AWS SDK V2测试将一系列调用链接到AWS客户端对象?

时间:2015-07-21 16:23:04

标签: ruby aws-sdk stub rspec3

我正在将AWS的实施升级到V2。我想在我的测试中创建一个AWS客户端对象,其Web请求是存根的。我遇到的问题是让这个测试客户端对应真实客户端,这样我就可以测试代码中客户端可能调用的方法。

我的测试套件是RSpec。为了让您了解问题:

aws_client = Aws::DynamoDB::Client.new(stub_responses: true) 

是它自己的对象。如果在测试中创建,它将不会与代码中的客户端对应,因为instance_double会:

let(:client) { instance_double(Aws::DynamoDB::Client) }
before do
  allow(Aws::DynamoDB::Client).to receive(:new).and_return(client)
  allow(client).to receive(<some_method>).with(<some parameters>)...
end

您可以看到“客户端”用于测试代码是否以所需方式与API通信。测试取决于代码是否使用具有正确参数的正确方法。

如何获得像aws_client这样的对象(而不是实例double)来对应客户端,因此没有未经授权的API调用,因此我可以测试代码中客户端调用的方法?

当我尝试在spec_helper或测试文件(Aws.config[:stub_responses] = true)中全局或部分存根AWS配置响应时,我仍然看到未经授权的API请求。

1 个答案:

答案 0 :(得分:0)

您可以查看https://relishapp.com/rspec/rspec-mocks/docs/working-with-legacy-code/message-chains (receive_message_chain)

    allow(double).to receive_message_chain(:foo, :bar).and_return(:baz)