🦔

Unitテストで422エラーが発生した

2022/11/29に公開

事象

下記GitHubリンクにて、search APIのユニットテストを処理していたところ、422エラーが発生した。
https://github.com/yxo5017/cd0037-API-Development-and-Documentation-exercises/blob/master/4_TDD_Starter/

添付のように、DBに保管した書籍が一覧表示されるアプリである。

バックエンドのtest_flaskr.pyに以下の通り、ユニットテストを書いてtest_flaskr.pyを実行したところ、422エラーが発生した。
https://github.com/yxo5017/cd0037-API-Development-and-Documentation-exercises/blob/master/4_TDD_Starter/backend/test_flaskr.py

    def test_get_book_search_with_results(self):
        res = self.client().post("/books", json={"search": "Novel"})
        data = json.loads(res.data)
        self.assertEqual(res.status_code, 200)
        self.assertEqual(data["success"], True)
        self.assertTrue(data["total_books"])
        self.assertEqual(len(data["books"]), 3)

    def test_get_book_search_without_results(self):
        res = self.client().post("/books", json={"search": "applejacks"})
        data = json.loads(res.data)

        self.assertEqual(res.status_code, 200)
        self.assertEqual(data["success"], True)
        self.assertEqual(data["total_books"], 0)
        self.assertEqual(len(data["books"]), 0)

原因

コードは合っているし、書籍もローカルホストで表示されるのになんでだ??と思ったところ、上記ファイルのDB接続先に原因があった。本番DBはbookshelfでデータが入っていたが、bookshelf_testにデータが入っておらず、その結果422エラーが出ていた。

    def setUp(self):
        """Define test variables and initialize app."""
        self.app = create_app()
        self.client = self.app.test_client
        self.database_name = "bookshelf_shelf"
        self.database_path = "postgresql://{}:{}@{}/{}".format(
            "student", "student", "localhost:5432", self.database_name
        )
        setup_db(self.app, self.database_path)

Discussion