django TestCase 中的夹具继承

Fixture inheritance in django TestCase

我有一个非常简单的场景

from django.test import TestCase

class BaseTest(TestCase):
    fixtures = ('users.json',)
    ...


class SpecificTest(BaseTest):
    fixtures = ('transactions.json',)
    ...

transactions 对用户有一个 FK,当 SpecificTest 尝试加载 fixtures 我得到一个 IntegrityError

IntegrityError: Problem installing fixtures: 
The row in table 'app_transactions' with primary key '1' has an 
invalid foreign key: app_transactions.user_id contains a value '30'   
that does not have a corresponding value in app_user.id.

此错误意味着 BaseTest 中加载的 users.json 夹具未在 transactions.json 夹具之前加载(如您所料)。我的问题是,子类化测试时加载固定装置的正确方法是什么?

Django 1.7

当您在子类中覆盖 fixtures 时,它 替换 固定装置,而不是扩展它们。

您可以明确重复固定装置:

class SpecificTest(BaseTest):
    fixtures = ('users.json', 'transactions.json',)

或在您的子类中参考 BaseTest.fixtures

class SpecificTest(BaseTest):
    fixtures = BaseTest.fixtures + ('transactions.json',)