diff --git a/docs/ja/docs/advanced/async-tests.md b/docs/ja/docs/advanced/async-tests.md new file mode 100644 index 000000000..839cf0ade --- /dev/null +++ b/docs/ja/docs/advanced/async-tests.md @@ -0,0 +1,101 @@ +# 非同期テスト + +前の章では`TestClient` を使ってFastAPIアプリをテストする方法を見てきたと思いますが、これまでは `async` を使わない同期的なテストのみでした。 + +しかし、テストで非同期関数を使えると便利なケースがあります。 +たとえば、データベースに非同期でクエリする場合を考えてみましょう。 +FastAPIアプリにリクエストを送り、非同期データベースライブラリを使って正しくデータが保存されたか確認したい場合があると思います。 + +早速ですが、これを実現する方法を見ていきましょう。 + +## pytest.mark.anyio + +テストで非同期関数を呼び出したい場合、テスト関数自体も非同期である必要があります。 +AnyIO はそのための便利なプラグインを提供しており、特定のテスト関数を非同期で実行できるようにします。 + +## HTTPX + +FastAPIアプリケーションが`async def`ではなく通常の`def`関数を使用していても、内部的には非同期アプリケーションのままです。 + +`TestClient` は、標準の pytest を使用して通常の `def` テスト関数内で非同期 FastAPI アプリケーションを呼び出すために内部でマジックをしてくれますが、非同期関数内で使用する場合は、このマジックはもはや機能しません。 + +`TestClient` は HTTPX をベースとしており、幸い、これを直接使用して API をテストできます。 + +## 例 + +簡単な例として、[Bigger Applications](../tutorial/bigger-applications.md){.internal-link target=_blank} および [Testing](../ja/tutorial/testing.md){.internal-link target=_blank} で説明されているのと似たファイル構成で考えてみましょう。 + +``` +. +├── app +│ ├── __init__.py +│ ├── main.py +│ └── test_main.py +``` + +ファイル `main.py` には以下の内容が含まれます: + +{* ../../docs_src/async_tests/main.py *} + +ファイル `test_main.py` には `main.py` のテストが含まれ、現在は次のようになっています: + +{* ../../docs_src/async_tests/test_main.py *} + +## 実行方法 + +通常通り、以下のようにテストを実行できます: + +