我正在尝试运行我为Django项目编写的单元测试,但测试在数据库创建阶段失败。我有一个单独的数据库“test”,其中一个作为与另一个的外键关系。我运行以下内容:
python3 manage.py test --settings myapp.settings_test
并看到以下输出:
Creating test database for alias 'test'...
Got an error creating the test database: (1007, "Can't create database 'test_test'; database exists")
Type 'yes' if you would like to try deleting the test database 'test_test', or 'no' to cancel: yes
Destroying old test database for alias 'test'...
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/django/db/backends/utils.py", line 85, in _execute
return self.cursor.execute(sql, params)
File "/usr/local/lib/python3.5/dist-packages/django/db/backends/mysql/base.py", line 71, in execute
return self.cursor.execute(query, args)
File "/usr/local/lib/python3.5/dist-packages/MySQLdb/cursors.py", line 250, in execute
self.errorhandler(self, exc, value)
File "/usr/local/lib/python3.5/dist-packages/MySQLdb/connections.py", line 50, in defaulterrorhandler
raise errorvalue
File "/usr/local/lib/python3.5/dist-packages/MySQLdb/cursors.py", line 247, in execute
res = self._query(query)
File "/usr/local/lib/python3.5/dist-packages/MySQLdb/cursors.py", line 411, in _query
rowcount = self._do_query(q)
File "/usr/local/lib/python3.5/dist-packages/MySQLdb/cursors.py", line 374, in _do_query
db.query(q)
File "/usr/local/lib/python3.5/dist-packages/MySQLdb/connections.py", line 277, in query
_mysql.connection.query(self, query)
_mysql_exceptions.IntegrityError: (1215, 'Cannot add foreign key constraint')
我见过许多答案,例如:Django MySQL error when creating tables。
这样的答案表明,通常,在添加外键引用的表之前添加具有外键字段的表会导致此错误。但是,我没有找到很多有用的答案,如何在测试场景中解决这个问题。
我尝试过的其他事情:
我试图在Django shell中运行测试,以便我可以使用“django.db.connection”来显示Django正在运行的原始MySQL命令,但我似乎无法弄清楚如何在Django shell中运行测试。
我试图在没有迁移的情况下运行测试(https://pypi.org/project/django-test-without-migrations/),但这似乎没有效果。
在我的测试设置文件中,我添加了MIGRATION_MODULES变量来解决具有外键字段的应用程序“badapp”:
MIGRATION_MODULES = { 'badapp':没有 }
但这也没有区别。
我想知道:
1.。)如何通过以错误的顺序添加表来验证此错误是什么?
2.。)运行测试时如何强制以特定顺序添加表?
答案 0 :(得分:0)
根据您的reddit version of the question,您在数据库选项中设置了DispatchQueue.main.async {
tableView.reloadData()
}
。删除后会发生什么?什么是你的默认存储引擎(我假设InnoDB但想要检查)?