测试时,Django夹具的加载顺序是否正确?

时间:2010-08-26 14:03:40

标签: python django django-fixtures

我正在测试我的应用程序,我遇到了一个问题,我不知道为什么。我正在为我的测试加载灯具,灯具有相互依赖的外键。它们必须以特定顺序加载,否则将无效。

我正在加载的灯具是:

["test_company_data", "test_rate_index", 'test_rate_description']

公司数据是第一个。 test_rate_index具有公司的外键,test_rate_description具有test_rate_index中声明的模型的外键。 (顺便说一句,不同的测试需要不同的装置,这就是为什么我不只是把所有东西都推到一起)

如果我使用django的标准程序加载测试,则测试不会以正确的顺序加载。

class TestPackages(test.TestCase):
    fixtures = ["test_company_data", "test_rate_index", "test_rate_description",]

我收到了消息

DoesNotExist: RateDescription matching query does not exist.

但是,如果我颠倒了我的灯具的顺序(这没有意义)它可以工作:

fixtures = ["test_rate_description", "test_company_data", "test_rate_index",]

Django's documentation表示灯具按照声明的顺序加载,但似乎并非如此。

作为一种解决方法,而不是使用django的

    call_command('loaddata', *fixtures, **{
                                            'verbosity': 0,
                                            'commit': False,
                                            'database': 'default'
                                         })

我在setUp方法中使用了一个不同的函数,一次加载一个灯具。

def load_fixtures(fixtures):
    for fixture in fixtures:
        call_command('loaddata', fixture, **{
                                            'verbosity': 0,
                                            'commit': False,
                                            'database': 'default'
                                            })

在尝试使用标准方法时,是否有一些我做错了或不理解导致我的灯具没有以正确的顺序加载?

1 个答案:

答案 0 :(得分:1)

  

Django的文档说明灯具按照声明的顺序加载,但似乎并非如此。

这当然很奇怪。当我测试我的一个项目(Django 1.2.1,Python 2.6.2,Postgresql 8.3.11)时,夹具以正确的顺序加载。

以下是我要解决的问题。

  

DoesNotExist:RateDescription匹配查询不存在。

  1. 加载灯具或执行测试时是否收到此错误?你能找到提升这个的灯具/代码吗?如果需要,可以增加详细程度。

  2. 您可以尝试从命令行触发loaddata命令吗?调用它三次,以适当的预期顺序为每个调用传递一个fixture的名称。并查看灯具是否加载。

  3. 我知道你可能已经这样做但是你能确保第一和第二个灯具不包含任何RateDescription数据吗?