cobra-chan
@cobra-chan

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

AssertionError: assert 404 == 200が出て、テストが通らない

解決したいこと

FastAPIでユニットテストがどうしても通りません。
解決方法を教えて下さい。よろしくお願いいたします。

発生している問題・エラー

E       AssertionError: assert 404 == 200
E        +  where 404 = <Response [404 Not Found]>.status_code
E        +  and   200 = <module 'starlette.status' from '/src/.venv/lib/python3.11/site-packages/starlette/status.py'>.HTTP_200_OK
E        +    where <module 'starlette.status' from '/src/.venv/lib/python3.11/site-packages/starlette/status.py'> = starlette.status

tests/test_main.py:37: AssertionError
FAILED tests/test_main.py::test_create_and_read - AssertionError: assert 404 == 200

該当するソースコード

@pytest.mark.asyncio
async def test_done_flag(async_client):
   response = await async_client.post("/task", json={"title": "テストタスク"})
   assert response.status_code == starlette.status.HTTP_200_OK

自分で試したこと

AssertionErrorについて自分なりに調べたのですがどう書き換えれば良いのか分かりません。

0

1Answer

AssertionError はアサーションが失敗したときに発生するエラーです。アサーションはプログラムの実行中に変数の値などが期待通りになっているかチェックする仕組みです。期待通りなら何も起きず、そうでなければ AssertionError が発生します。今回の発生箇所は以下です。

assert response.status_code == starlette.status.HTTP_200_OK

HTTP レスポンスのステータスコードが 200 OK になることを期待していますが、実際には 404 Not Found になっています。

これは async_client.post("/task", json={"title": "テストタスク"}) でリクエストした /task が404を返していることを意味します。原因は /task が実装されていなかったり、ルーティングが間違っていたり、実装から誤って404を返していたりする可能性が考えられます。実装を確認してください。

1Like

Your answer might help someone💌