报错Exception("Please define available_apps in TransactionTestCase and its subclasses.")的解决
报错的原因
这个错误通常是由于你使用了 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` 是你要测试的应用程序,请根据需要自行替换。