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

Python 为什么我的Django工厂函数在本地数据库中创建模型,而不是在测试数据库中创建模型?,python,django,testing,factory,django-nose,Python,Django,Testing,Factory,Django Nose,我在Django项目中有一些测试,需要创建一些模型并将它们保存到DB中。我将创建实例的代码提取到一些“工厂”函数中,这些函数位于一个单独的模块(.py文件)中,帮助我快速创建相关模型集等(因此使用了object.create()stuff)。这些函数非常简单,如下所示: def foo_factory(): return Foo.objects.create( bar="random data" ) def bar_factory(foo_inst=foo_fac

我在Django项目中有一些测试,需要创建一些模型并将它们保存到DB中。我将创建实例的代码提取到一些“工厂”函数中,这些函数位于一个单独的模块(.py文件)中,帮助我快速创建相关模型集等(因此使用了
object.create()
stuff)。这些函数非常简单,如下所示:

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

def bar_factory(foo_inst=foo_factory())
    return Bar.objects.create(
        related=foo_inst
    )
TestFooThing(TestCase):
    def test_foo_stuff(self):
        foo_inst = foo_factory()
        self.assertTrue(foo_inst.blah)
当我运行测试时,调用此功能的测试(在django的TestCase类中)将其模型实例保存到我的本地dev DB(在我的本地设置文件中指定),而不是自动创建的临时测试DB

测试如下所示:

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

def bar_factory(foo_inst=foo_factory())
    return Bar.objects.create(
        related=foo_inst
    )
TestFooThing(TestCase):
    def test_foo_stuff(self):
        foo_inst = foo_factory()
        self.assertTrue(foo_inst.blah)
我的理解是,整个环境是使用测试环境设置引导的,但是这个特定的案例似乎不是这样工作的。其他测试使用测试数据库就可以了

我错过了什么

详情:

  • Django 1.6

  • 使用django nose运行测试


在导入模块时评估bar_工厂参数foo_inst。在那个时候,数据库通常仍然指向本地开发数据库,而不是测试数据库

您必须重写默认值,以便稍后对其进行计算。例如,不要传递实例,而是传递一个callable,并在bar_工厂内调用它