数据库测试

未匹配的标注

默认情况下,您的测试不会从数据库的角度孤立地运行。这意味着您的本地数据库将在您运行测试时被修改,并且不会在测试结束时回滚。
虽然在大多数情况下这种行为可能没问题,但您可以在下面了解如何配置测试用例以在每次测试后重置数据库。

每次测试后重置数据库

如果你想为每个测试创建一个干净的数据库,你必须使用DatabaseTransactions类来继承TestCase类。然后,您的所有测试都将在事务中运行,因此您创建的任何数据都将仅存在于测试的生命周期内。测试完成后,您的数据库将回滚到之前的状态。这是防止测试数据堵塞数据库的完美方法。

from masonite.tests import TestCase, DatabaseTransactions

class TestSomething(TestCase, DatabaseTransactions):

  connection = "testing"

  def test_can_create_user(self):
      User.create({"name": "john", "email": "john6", "password": "secret"})

请注意,您在测试期间使用的connection可以定义。这将允许您选择将用于测试的不同数据库。这是您在可以使用的数据库配置文件的标准示例。

# config/database.py
DATABASES = {
    "default": "mysql",
    "mysql": {
        "host": "localhost",
        "driver": "mysql",
        "database": "app",
        "user": "root",
        "password": "",
        "port": 3306
    }
    "testing": {
        "driver": "sqlite",
        "database": "test_database.sqlite3",
    },
}

可用断言

Masonite 提供了几个可在测试期间使用的数据库断言。

assertDatabaseCount

对数据库的表中数据进行计数。

self.assertDatabaseCount(table, count)
  def test_can_create_user(self):
      User.create({"name": "john", "email": "john6", "password": "secret"})
      self.assertDatabaseCount("users", 1)

assertDatabaseHas

查询数据库对应表中与筛选条件相匹配的数据记录。

self.assertDatabaseHas(table, query_dict)
self.assertDatabaseCount("users", {"name": "John"})

assertDatabaseMissing

查询数据库中与查询条件不匹配的数据记录。

self.assertDatabaseMissing(table, query_dict)
self.assertDatabaseMissing("users", {"name": "Jack"})

assertDeleted

将模型实例从数据库中删除

user=User.find(1)
user.delete()
self.assertDeleted(user)

assertSoftDeleted

将模型实例从数据库中软删除
(orm.masoniteproject.com/models#sof...)

self.assertSoftDeleted(user)

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/4.0/te...

译文地址:https://learnku.com/docs/masonite/4.0/te...

上一篇 下一篇
贡献者:4
讨论数量: 0
发起讨论 只看当前版本


暂无话题~