🦔
Unitテストで422エラーが発生した
事象
下記GitHubリンクにて、search APIのユニットテストを処理していたところ、422エラーが発生した。
添付のように、DBに保管した書籍が一覧表示されるアプリである。
バックエンドのtest_flaskr.pyに以下の通り、ユニットテストを書いてtest_flaskr.pyを実行したところ、422エラーが発生した。
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