用作默认参数值时 Django factoryboy 失败
Django factoryboy fail when used as default parameter value
我有一组工厂,我在测试阶段通过一个名为 Create
的便捷函数 运行。当我需要引用现有项目时,我将其作为参数传递,如果不是,我使用 FactoryBoy 创建一个新项目:
def Create(project=ProjectFactory()):
# do stuff with project
我是这样调用函数的:
Create() # new project will be defined
Create(existing_project) # existing project will be used
但是它不起作用,我有一堆错误:
E ProgrammingError: relation "auth_user" does not exist
E LINE 1: ...user"."is_active", "auth_user"."date_joined" FROM "auth_user...
E ^
在尝试了几天不同的解决方法后,我发现这个版本有效:
def Create(project=None):
project = ProjectFactory() if not project else project
# do stuff with project
对我来说它做同样的事情,我在这里错过了什么?
请注意,def Create(project=ProjectFactory()):
中的默认参数在模块加载时绑定,基本上是在测试运行器启动时绑定。由于测试运行器从头开始迁移测试数据库,因此无法在此时创建和保存 Project
。
在第二个版本中
def Create(project=None):
project = ProjectFactory() if not project else project
创建 Project
的代码在函数内部,因此仅在调用函数后执行 -- 在 迁移 运行.
我有一组工厂,我在测试阶段通过一个名为 Create
的便捷函数 运行。当我需要引用现有项目时,我将其作为参数传递,如果不是,我使用 FactoryBoy 创建一个新项目:
def Create(project=ProjectFactory()):
# do stuff with project
我是这样调用函数的:
Create() # new project will be defined
Create(existing_project) # existing project will be used
但是它不起作用,我有一堆错误:
E ProgrammingError: relation "auth_user" does not exist
E LINE 1: ...user"."is_active", "auth_user"."date_joined" FROM "auth_user...
E ^
在尝试了几天不同的解决方法后,我发现这个版本有效:
def Create(project=None):
project = ProjectFactory() if not project else project
# do stuff with project
对我来说它做同样的事情,我在这里错过了什么?
请注意,def Create(project=ProjectFactory()):
中的默认参数在模块加载时绑定,基本上是在测试运行器启动时绑定。由于测试运行器从头开始迁移测试数据库,因此无法在此时创建和保存 Project
。
在第二个版本中
def Create(project=None):
project = ProjectFactory() if not project else project
创建 Project
的代码在函数内部,因此仅在调用函数后执行 -- 在 迁移 运行.