Edited at

moto によって requests が意図せずモック化されてしまう問題を回避する

moto は、AWS SDK の mocking パッケージです。

moto を用いたユニットテストについては以前 エントリを書きました。

このなかで触れましたが、requests パッケージが意図せずモック化されてしまう問題があります。

この問題の回避策について自分なりのアプローチをまとめておきます


問題

問題としては、moto でスタブをアクティブにすると その後の requests パッケージによるリクエストがすべてモック化されてしまうというものです:

https://github.com/spulec/moto/issues/1567

これにより、elasticsearch-py など requests に依存したパッケージにおいてHTTPリクエストのさいにエラーが起きることがあります。


回避策

回避策としては、moto の responses_mock にパススルーする URL を登録します:

moto.core.models.responses_mock.add_passthru('http://localhost:9200')

responses という requests の mocking パッケージがあります。

moto はこれを AWS からのレスポンスをスタブ化するのに使っていて、パススルー元を追加するメソッドでスタブ化させたくない URL を事前に登録します。


参考