为什么Django';当我';我没有要求它吗?
我正在尝试使用Django的工厂机器人模块为我的模型创建工厂。我也在使用pytest。我创建了这些工厂为什么Django';当我';我没有要求它吗?,django,unit-testing,pytest,factory-boy,Django,Unit Testing,Pytest,Factory Boy,我正在尝试使用Django的工厂机器人模块为我的模型创建工厂。我也在使用pytest。我创建了这些工厂 import factory from maps.models import CoopType, Coop from address.models import AddressField from phonenumber_field.modelfields import PhoneNumberField from address.models import State, Country, Lo
import factory
from maps.models import CoopType, Coop
from address.models import AddressField
from phonenumber_field.modelfields import PhoneNumberField
from address.models import State, Country, Locality
class CountryFactory(factory.DjangoModelFactory):
"""
Define Country Factory
"""
class Meta:
model = Country
name = "Narnia"
code = "NN"
class StateFactory(factory.DjangoModelFactory):
"""
Define State Factory
"""
class Meta:
model = State
name = "Narnia"
code = "NN"
country = CountryFactory()
class LocalityFactory(factory.DjangoModelFactory):
"""
Define Locality Factory
"""
class Meta:
model = Locality
name = "Narnia"
postal_code = "60605"
state = StateFactory()
class AddressFactory(factory.DjangoModelFactory):
"""
Define Address Factory
"""
class Meta:
model = Address
street_number = "123"
route = "Rd"
raw = "123 Fake Rd"
formatted = "123 Fake Rd."
latitude = 87.1234
longitude = -100.12342
locality = LocalityFactory()
class CoopTypeFactory(factory.DjangoModelFactory):
"""
Define Coop Type Factory
"""
class Meta:
model = CoopType
到目前为止,我有一个非常简单的测试文件。它只有一个测试
import pytest
from django.test import TestCase
from .factories import CoopTypeFactory, CoopFactory
class ModelTests(TestCase):
@classmethod
def setUpTestData(cls):
print("setUpTestData: Run once to set up non-modified data for all class methods.")
#management.call_command('loaddata', 'test_data.yaml', verbosity=0)
pass
def setUp(self):
print("setUp: Run once for every test method to setup clean data.")
#management.call_command('flush', verbosity=0, interactive=False)
pass
@pytest.mark.django_db
def test_coop_type_create(self):
""" Test customer model """ # create customer model instance
coop_type = CoopTypeFactory(name="Test Coop Type Name")
assert coop_type.name == "Test Coop Type Name"
但当我运行我的测试时,它就死了,它抱怨我甚至没有创建工厂的重复密钥
davea$ python manage.py test --settings=maps.test_settings
Creating test database for alias 'default'...
System check identified no issues (0 silenced).
E
======================================================================
ERROR: tests.test_models (unittest.loader._FailedTest)
----------------------------------------------------------------------
ImportError: Failed to import test module: tests.test_models
Traceback (most recent call last):
File "/Users/davea/Documents/workspace/chicommons/maps/web
...
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/loader.py", line 434, in _find_test_path
module = self._get_module_from_name(name)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/loader.py", line 375, in _get_module_from_name
__import__(name)
File "/Users/davea/Documents/workspace/chicommons/maps/web/tests/test_models.py", line 3, in <module>
from .factories import CoopTypeFactory, CoopFactory
File "/Users/davea/Documents/workspace/chicommons/maps/web/tests/factories.py", line 19, in <module>
class StateFactory(factory.DjangoModelFactory):
File "/Users/davea/Documents/workspace/chicommons/maps/web/tests/factories.py", line 28, in StateFactory
country = CountryFactory()
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/factory/base.py", line 46, in __call__
return cls.create(**kwargs)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/factory/base.py", line 564, in create
return cls._generate(enums.CREATE_STRATEGY, kwargs)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/factory/django.py", line 141, in _generate
return super(DjangoModelFactory, cls)._generate(strategy, params)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/factory/base.py", line 501, in _generate
return step.build()
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/factory/builder.py", line 279, in build
kwargs=kwargs,
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/factory/base.py", line 315, in instantiate
return self.factory._create(model, *args, **kwargs)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/factory/django.py", line 185, in _create
return manager.create(*args, **kwargs)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/models/query.py", line 417, in create
obj.save(force_insert=True, using=self.db)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/models/base.py", line 729, in save
force_update=force_update, update_fields=update_fields)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/models/base.py", line 759, in save_base
updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/models/base.py", line 842, in _save_table
result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/models/base.py", line 880, in _do_insert
using=using, raw=raw)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/models/manager.py", line 82, in manager_method
return getattr(self.get_queryset(), name)(*args, **kwargs)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/models/query.py", line 1125, in _insert
return query.get_compiler(using=using).execute_sql(return_id)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/models/sql/compiler.py", line 1280, in execute_sql
cursor.execute(sql, params)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 68, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/backends/utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/django/db/backends/mysql/base.py", line 71, in execute
return self.cursor.execute(query, args)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/MySQLdb/cursors.py", line 209, in execute
res = self._query(query)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/MySQLdb/cursors.py", line 315, in _query
db.query(q)
File "/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site-packages/MySQLdb/connections.py", line 239, in query
_mysql.connection.query(self, query)
django.db.utils.IntegrityError: (1062, "Duplicate entry 'Narnia' for key 'name'")
----------------------------------------------------------------------
Ran 1 test in 0.000s
davea$python manage.py test--settings=maps.test\u settings
正在为别名“default”创建测试数据库。。。
系统检查未发现任何问题(0静音)。
E
======================================================================
错误:tests.test\u模型(unittest.loader.\u失败测试)
----------------------------------------------------------------------
导入错误:无法导入测试模块:tests.test\u模型
回溯(最近一次呼叫最后一次):
文件“/Users/davea/Documents/workspace/chicommons/maps/web
...
回溯(最近一次呼叫最后一次):
文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/loader.py”,第434行,位于“查找测试”路径中
module=self.\u从\u name(name)获取\u module\u
文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/unittest/loader.py”,第375行,位于“从名称获取模块”中
__导入(名称)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/tests/test_models.py”,第3行,在
从.工厂进口CoopTypeFactory,CoopFactory
文件“/Users/davea/Documents/workspace/chicommons/maps/web/tests/factories.py”,第19行,在
类StateFactory(factory.DjangoModelFactory):
文件“/Users/davea/Documents/workspace/chicommons/maps/web/tests/factories.py”,第28行,在StateFactory中
country=CountryFactory()
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/factory/base.py”,第46行,在__
返回cls.create(**kwargs)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/factory/base.py”,第564行,在create中
返回cls.\u生成(enums.CREATE\u策略,kwargs)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/factory/django.py”,第141行,在
返回超级(DjangoModelFactory,cls)。\u生成(策略,参数)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/factory/base.py”,第501行,在
返回步骤build()
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/factory/builder.py”,第279行,内部版本
kwargs=kwargs,
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/factory/base.py”,第315行,在实例化中
返回self.factory.\u创建(模型,*args,**kwargs)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/factory/django.py”,第185行,在创建
返回管理器。创建(*args,**kwargs)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/models/manager.py”,第82行,在manager_方法中
返回getattr(self.get_queryset(),name)(*args,**kwargs)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/models/query.py”,第417行,在create中
对象保存(force_insert=True,using=self.db)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/models/base.py”,第729行,保存
强制更新=强制更新,更新字段=更新字段)
保存库中的文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/models/base.py”,第759行
更新=自我。保存表格(原始、cls、强制插入、强制更新、使用、更新字段)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/models/base.py”,第842行,在保存表格中
结果=self.\u do\u insert(cls.\u base\u manager,using,fields,update\u pk,raw)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/models/base.py”,第880行,插入
使用=使用,原始=原始)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/models/manager.py”,第82行,在manager_方法中
返回getattr(self.get_queryset(),name)(*args,**kwargs)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/models/query.py”,第1125行,插入
return query.get\u编译器(using=using).execute\u sql(return\u id)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/models/sql/compiler.py”,第1280行,在execute_sql中
cursor.execute(sql,params)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/backends/utils.py”,执行中第68行
返回self.\u使用包装器执行(sql,params,many=False,executor=self.\u execute)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/backends/utils.py”,第77行,使用包装器执行
返回执行器(sql、参数、多个、上下文)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/backends/utils.py”,第85行,在
返回self.cursor.execute(sql,params)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/utils.py”,第89行,在退出时__
使用exc_值的_回溯(回溯)提高dj_exc_值
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/backends/utils.py”,第85行,在
返回self.cursor.execute(sql,params)
文件“/Users/davea/Documents/workspace/chicommons/maps/web/venv/lib/python3.7/site packages/django/db/backends/mysql/base.py”,第71行,在execute中
雷图
class LocalityFactory(factory.DjangoModelFactory):
...
state = factory.SubFactory(StateFactory)