今天要來看看最後的 admin_bp
的測試。一樣,我們不會做完全每個頁面的測試,就大概展示一下就好。
話不多說,我們一樣一個一個測試來看,前面說過的就不再多贅述了。
from flask import url_for
from tests.helper import TestModel
class DashboardPageTest(TestModel):
def setUp(self) -> None:
super().setUp()
self.route = url_for("admin.admin_dashboard_posts_page")
def test_get_with_no_auth(self):
res = self.get()
self.assertEqual(res.status_code, 200)
self.assertIn(b"Login", res.data)
def test_get_with_user_auth(self):
res = self.get(login="user")
self.assertEqual(res.status_code, 403)
def test_get_with_admin_auth(self):
res = self.get(login="admin")
self.assertEqual(res.status_code, 200)
self.assertIn(b"Admin Dashboard", res.data)
這是管理員控制台的測試,但這是給貼文的 (admin_dashboard_posts_page
),給留言的也同理 (admin_dashboard_comments_page
),就不特別再寫了。當然它會有很多功能,但我們就先跳過。因為這是管理員的頁面,所以我們用 test_get_with_admin_auth
來測試一個用管理員登入之後再抓這個頁面,他的 assertIn
一樣是判斷 navbar。而如果只是一般使用者跑來這個頁面的話,他會回傳 403。在這邊他在沒有登入的狀況下抓這個控制台頁面他會回傳 200,這是因為我們到時候會把 401 處理掉,變成重新導向到登入頁面之類的。
接下來是使用者管理介面的測試。
class ManageUserPageTest(TestModel):
def setUp(self) -> None:
super().setUp()
self.route = url_for("admin.manage_user_page")
self.data_ok = {
"username": "user3",
"password": "password",
"email": "user3@a.a",
"is_admin": False,
}
self.data_bad_empty_field = {"username": "user3"}
def test_get_with_no_auth(self):
res = self.get()
self.assertEqual(res.status_code, 200)
self.assertIn(b"Login", res.data)
def test_get_with_user_auth(self):
res = self.get(login="user")
self.assertEqual(res.status_code, 403)
def test_get_with_admin_auth(self):
res = self.get(login="admin")
self.assertEqual(res.status_code, 200)
self.assertIn(b"Admin Dashboard", res.data)
def test_post_ok(self):
res = self.post(login="admin", data=self.data_ok)
self.assertEqual(res.status_code, 200)
self.assertIn(b"Add user successfully.", res.data)
def test_post_bad_empty_field(self):
res = self.post(login="admin", data=self.data_bad_empty_field)
self.assertEqual(res.status_code, 200)
self.assertIn(b"This field is required.", res.data)
在 setUp
裡面我們放了一個 OK 的資料和一個有欄位留空的資料,這兩筆資料都是用來新增一個使用者的,我們之後會把一個新增使用者的表單放在這裡,讓管理員可以快速新增帳號。這個判斷空欄位一樣是 Flask-WTF 處理的,也當然可以自訂這個錯誤訊息。在測試 OK 的資料裡面,我們也加了一個訊息,這是到時候新增使用者成功時會 flash
出來的,同樣的道理,在登入、註冊等等頁面也都可以加入類似的訊息來判斷。
到這邊為止,我們就把簡略的測試寫好了。當然有很多頁面根本沒測試到,也有很多功能也都沒有去特別處理,但這就是展示,如果需要的話可以自己想想覺得還缺甚麼,然後慢慢補齊。
我們在寫測試的最一開始有在 manage.py
裡面加入一個 flask test
的指令,現在全部寫完了,可以來跑跑看。沒有意外的話應該會噴出一堆 error (基本上都是路徑抓不到的問題) 跟 failed,我們最後的目標就是把他們修到好。