python - 为什么我的 Django 工厂函数在本地数据库中创建模型,而不是测试数据库?

标签 python django testing factory django-nose

我的 Django 项目中有一些测试需要创建一些模型并将它们保存到数据库中。我将实例创建代码提取到一些位于单独模块(.py 文件)中的“工厂”函数中,帮助我快速创建相关模型集等(因此 object.create()东西)。这些函数非常简单,看起来像这样:

def foo_factory():
    return Foo.objects.create(
       bar="random data"
    )

def bar_factory(foo_inst=foo_factory())
    return Bar.objects.create(
        related=foo_inst
    )

当我运行测试时,调用此功能的测试(在 django 的 TestCase 类中)将它们的模型实例保存到我的本地开发数据库(在我的本地设置文件中指定),不是自动创建的临时测试数据库。

测试看起来像这样:

TestFooThing(TestCase):
    def test_foo_stuff(self):
        foo_inst = foo_factory()
        self.assertTrue(foo_inst.blah)

我的理解是,整个环境都是使用测试环境设置引导的,但这种特定情况似乎并非如此。其他测试使用测试数据库就好了。

我在这里错过了什么?

详细信息:

  • Django 1.6

  • 使用 django-nose 运行测试

最佳答案

bar_factory 参数 foo_inst 在模块导入时计算。那时候通常数据库还是指向本地的dev db,而不是test db。

您必须重写默认值,以便稍后对其进行评估。例如,不是传递实例,而是传递一个可调用对象并在您的 bar_factory 中调用它。

关于python - 为什么我的 Django 工厂函数在本地数据库中创建模型,而不是测试数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23339228/

相关文章:

testing - 我们如何使用 browserstack 和 Geb Framework 在多个浏览器上执行单个测试

使用放心的多个 GET 请求进行 Java 休息测试

perl - 我如何检查一个文件是否被另一个 Perl 程序打开?

python - 从字符串中删除\u?

python - DataFrame.drop_duplicates 和 DataFrame.drop 不删除行

python - DjangoForeignKey用户认证

javascript - 无法使用 Jquery 从 Freebase 导出额外数据

python - 尝试部署到heroku但不断被拒绝

python - 是否有用于从文本中查找和提取字符串的正则表达式

django - 在 Django 中加速移动页面?