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

Aar*_*ron 7 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的文档声明夹具按照声明的顺序加载,但似乎并非如此.

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

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

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

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

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

Man*_*dan 1

Django 的文档指出,装置按照声明的顺序加载,但情况似乎并非如此。

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

这是我要解决的问题。

DoesNotExist:RateDescription 匹配查询不存在。

  1. 您在加载夹具或执行测试时是否遇到此错误?你能找到引起这个问题的装置/代码吗?如果需要的话,增加详细程度。

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

  3. 我知道您可能已经这样做了,但是您能确保第一个和第二个装置不包含任何RateDescription数据吗?

  • 您好,Manoj,感谢您的调试建议。当我从命令行运行时,我发现灯具正在爆炸,因为“creation_time”可能不为空”。将creation_time添加到灯具后,它们似乎按照我的预期运行。但是,这对我来说仍然没有意义为什么他们会按照一种顺序安装,但不是另一种。我所有的测试都通过了,并且测试依赖于那里的数据。 (2认同)