【问题标题】:Django factoryboy fail when used as default parameter valueDjango factoryboy 用作默认参数值时失败
【发布时间】:2016-04-04 08:44:22
【问题描述】:

我有一组工厂,我在测试阶段通过一个名为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

对我来说,它做同样的事情,我在这里缺少什么?

【问题讨论】:

    标签: python django optional-parameters factory-boy


    【解决方案1】:

    注意def Create(project=ProjectFactory()): 中的默认参数是在模块加载时绑定的,主要是在测试运行程序启动时。由于测试运行程序从头开始迁移测试数据库,因此此时它无法创建和保存Project

    在第二个版本中

    def Create(project=None):
        project = ProjectFactory() if not project else project
    

    创建Project 的代码在函数内部,因此只有在调用函数后才会执行 -- 迁移运行之后。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-20
    • 1970-01-01
    • 2010-09-19
    • 2011-08-05
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    相关资源
    最近更新 更多