Day 17 实作测试 (3)

前言

今天要来看看最後的 admin_bp 的测试。一样,我们不会做完全每个页面的测试,就大概展示一下就好。

test_admin

话不多说,我们一样一个一个测试来看,前面说过的就不再多赘述了。


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": "[email protected]",
            "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,我们最後的目标就是把他们修到好。


<<:  Android Studio初学笔记-Day2-LinearLayout介绍

>>:  那些被忽略但很好用的 Web API / Console

我们的基因体时代-AI, Data和生物资讯 Day23- 基因注释资料在Bioconductor中视觉化之呈现:Gviz

上一篇我们的基因体时代-AI, Data和生物资讯 Day22- 基因注释资料在Bioconduct...

[Day 03] 机器学习产品生命周期 — 救救我啊我救我

MLOps is an emerging discipline and comprises a s...

[Day13]ISO 27001 标准:风险评监

风险 表示发生,可能会对价值或资产造成负面的冲击。 风险是外部威胁利用弱点对内部资产造成冲击的可能性...

Day19:别说那麽多废话,讲重点

Lambda在刚开始学Java一定会很不想碰,会觉得好不容易对Java有点熟悉了,结果又搞出一整陀新...

[Day 06] 一个单元测试的题目-闰年的判断

过了这麽多天, 我们终於进入到主题了, 这一次我们使用的题目, 是输入一个正整数(西元年), 然後判...