您的位置:

报错Exception("Please define available_apps in TransactionTestCase and its subclasses.")的解决

  发布时间:2023-04-02 11:06:09
报错的原因这个错误通常是由于你使用了 Django 的类或它的子类来运行测试,但没有在类中定义 "available_apps" 属性是一个列表,用于指定在运行测试时应加载哪些应用程序。例如更新到Django 或更高版本后,Django会使用“available_apps”属性来指定测试中使用的应用程序。或者,你可能已经继承了一个父类并重写了available_apps属性,但在子类里没有赋值,请检查父类里有无available_apps属性。如果以上建议都无法解决这个问题,请确保你正在使用最新版本的Django并且你的测试文件是否正确。

报错的原因

这个错误通常是由于你使用了 Django 的 TransactionTestCase 类或它的子类(例如 TestCase)来运行测试,但没有在类中定义 "available_apps" 属性。

"available_apps" 是一个列表,用于指定在运行测试时应加载哪些应用程序。如果没有指定这个属性,Django 就会触发上述错误。

要解决这个问题,你需要在你的测试类中定义 "available_apps" 属性,并在其中列出你要在测试中使用的所有应用程序。例如:


class MyTests(TransactionTestCase):
    available_apps = ['myapp']

    def test_something(self):
        ...

如何解决

解决办法是在你的测试类中定义 "available_apps" 属性,并列出你要在测试中使用的所有应用程序。

如果你想在测试中使用所有应用程序,则可以使用 INSTALLED_APPS 列表,如下所示:


class MyTests(TransactionTestCase):
    available_apps = settings.INSTALLED_APPS
    ...

如果你只想测试特定的应用程序,则只需在 "available_apps" 列表中列出这些应用程序即可。

这样就能避免了 Exception("Please define available_apps in TransactionTestCase and its subclasses.")

如果你还是收到了这个错误,可能是因为你正在使用的是Django 1.8版本或更早版本,在这些版本中,需要使用"apps"属性而不是"available_apps"来在测试类中定义应用程序。例如:


class MyTests(TransactionTestCase):
    apps = ['myapp']
    ...

更新到Django 1.9或更高版本后,Django会使用“available_apps”属性来指定测试中使用的应用程序。

或者,你可能已经继承了一个父类并重写了available_apps属性,但在子类里没有赋值,请检查父类里有无available_apps属性。

如果以上建议都无法解决这个问题,请确保你正在使用最新版本的Django并且你的测试文件是否正确。

使用例子

在Django 1.9及以上版本中:


from django.test import TransactionTestCase

class MyTests(TransactionTestCase):
    available_apps = ['myapp']
    def test_something(self):
        # test code here

在Django 1.8及以下版本中:


from django.test import TransactionTestCase

class MyTests(TransactionTestCase):
    apps = ['myapp']
    def test_something(self):
        # test code here

如果想测试所有应用程序,可以这样


class MyTests(TransactionTestCase):
    available_apps = settings.INSTALLED_APPS
    def test_something(self):
        # test code here

这里的 `myapp` 是你要测试的应用程序,请根据需要自行替换。