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

时间:2014-04-28 10:54:25

标签: 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)

我的理解是使用测试环境设置来引导整个环境,但是这种特定情况似乎不起作用。其他测试使用测试DB就好了。

我在这里缺少什么?

详细说明:

  • Django 1.6

  • 使用django-nose运行测试

1 个答案:

答案 0 :(得分:0)

bar_factory参数foo_inst在模块导入时进行评估。那时通常数据库仍然指向本地dev db,而不是测试db。

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