Как можно заблокировать цепочку вызовов к клиентскому объекту AWS с помощью тестов AWS SDK V2?
Я обновляю нашу реализацию AWS до V2. Я хотел бы создать клиентский объект AWS в моих тестах, чьи веб-запросы являются заглушками. У меня проблема в том, чтобы заставить этот тестовый клиент соответствовать реальному клиенту, чтобы я мог тестировать методы, которые могут быть вызваны на клиенте в коде.
Мой набор тестов - 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, и чтобы я мог тестировать методы, которые вызываются на клиенте в коде?
Когда я пытался глобально или частично заглушить ответы конфигурации AWS в spec_helper или тестовом файле (Aws.config[:stub_responses] = true
), Я все еще вижу несанкционированные запросы API.
1 ответ
Вы можете посмотреть на 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)