Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么Django';当我';我没有要求它吗?_Django_Unit Testing_Pytest_Factory Boy - Fatal编程技术网

为什么Django';当我';我没有要求它吗?

为什么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

我正在尝试使用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, 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)