数据库测试
默认情况下,您的测试不会从数据库的角度孤立地运行。这意味着您的本地数据库将在您运行测试时被修改,并且不会在测试结束时回滚。
虽然在大多数情况下这种行为可能没问题,但您可以在下面了解如何配置测试用例以在每次测试后重置数据库。
每次测试后重置数据库
如果你想为每个测试创建一个干净的数据库,你必须使用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)
本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。