我正在将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请求。
答案 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)