7

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

我正在加载的固定装置是:

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

公司数据是第一位的。test_rate_index 有一个指向 company 的外键,而 test_rate_description 有一个指向在 test_rate_index 中声明的模型的外键。(顺便说一句,不同的测试需要不同的夹具,这就是为什么我不只是把所有东西都放在一个里面)

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

类TestPackages(test.TestCase):
    夹具 = [“test_company_data”,“test_rate_index”,“test_rate_description”,]

我收到消息

DoesNotExist:RateDescription 匹配查询不存在。

但是,如果我颠倒我的固定装置的顺序(这没有意义),它会起作用:

夹具 = [“test_rate_description”,“test_company_data”,“test_rate_index”,]

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

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

    call_command('loaddata', *fixtures, **{
                                            “冗长”:0,
                                            “提交”:错误,
                                            “数据库”:“默认”
                                         })

我在 setUp 方法中使用了一个不同的函数,它一次加载一个固定装置。

def load_fixtures(夹具):
    对于夹具中的夹具:
        call_command('loaddata', 夹具, **{
                                            “冗长”:0,
                                            “提交”:错误,
                                            “数据库”:“默认”
                                            })

在尝试使用标准方法时,是否有什么我做错了或不理解导致我的装置没有按正确的顺序加载?

4

1 回答 1

1

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

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

这是我要解决的问题。

DoesNotExist:RateDescription 匹配查询不存在。

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

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

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

于 2010-08-26T16:44:17.567 回答