工厂男孩填充本地数据库而不是测试数据库

0 人关注

我为一个django应用程序设置了大约100个单元测试,后来发现每个单元测试运行都在我的本地数据库中创建测试用户,而不是测试数据库。知道为什么吗?

apps/user/tests/factories.py

class CompanyFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = Company
    title = fake.name()
class UserFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = User
    auth0_id = fake.random_number()
    email = "unit_test_user@cart.com"
    company = SubFactory(CompanyFactory)  

当运行一个像这样使用工厂的测试时,假用户被持久化在本地数据库中。

有谁知道为什么可能会发生这种行为?

下面是我的数据库在本地设置中的样子。

DATABASES = {
    "default": {
        "ENGINE": "django.db.backends.postgresql_psycopg2",
        "NAME": "mia",
        "USER": "mia_dev",
        "PASSWORD": "test123",
        "HOST": "localhost",
        "PORT": 5432,

而且单元测试在测试运行期间似乎使用了正确的数据库,将 "test "追加到现有的本地数据库中。

(Pdb) from django.db import connection
(Pdb) connection.settings_dict['NAME']
'test_mia'
    
2 个评论
我认为这是因为当你使用 factory.django.DjangoModelFactory 时,它使用默认数据库 django.db.DEFAULT_DB_ALIAS ,因为你没有在 Meta 中指定测试数据库。我不太确定为什么从 factory.Factory 继承可以解决你的问题。
我已经编辑了这个问题。结果发现这个 "解决方案 "造成了其他问题,所以我决定不这样做。我仍然感到困惑。
python
django
unit-testing
factory-boy
Saul Feliz
Saul Feliz
发布于 2022-05-26
1 个回答
Saul Feliz
Saul Feliz
发布于 2022-06-03
已采纳
0 人赞同

对于那些在未来看到这个问题的人来说,这就是问题所在。

class SignUpTokenFactory(factory.django.DjangoModelFactory):
    class Meta:
        model = SignUpToken