【发布时间】:2016-08-25 23:16:39
【问题描述】:
我是 Django 的新手,我遇到了这个问题: 我使用 self.client 在我的应用程序中测试路线。 例如
class BookSell(TestCase):
fixtures = [
'sellers.yaml',
'books.yaml'
...
]
def test_get_book_sell(self):
book = Books.objects.get(pk=1)
print(book.name)#it prints "El Quijote" in the test output
response = self.client.get('/sell/book-sell')
self.assertEqual(response.status_code, 200)
self.assertContains(response, "Book Sell")
self.assertContains(response, "El Quijote")#book name
链接到该路径的视图方法应该从数据库中加载一些数据,然后渲染它。 但是当我运行时
python manage.py test app_name
它不会从固定装置加载数据,因为响应不包含“El Quijote”。只有当我跑步时:
python manage.py loaddata fixture_name.yaml ...
然后再次运行视图方法从数据库加载数据的测试。
所以我得出结论,当我运行测试时,我的视图方法从主数据库而不是测试数据库加载数据
我做错了什么? 有没有办法只从测试数据库中加载数据?
django 版本:1.9.4
python 版本:2.7.6
我确信夹具在测试数据库中加载成功
【问题讨论】:
-
那么当您在运行 loaddata 后运行测试时,响应确实包含“El Quijote”?测试数据库应该始终与真实数据库完全分开,所以这有点令人担忧。
-
是的,我的朋友,我很担心:c
-
我会尝试修改您的主数据库,使其与固定装置不同(例如,更改“El Quijote”的名称,然后打印测试中的所有书名以查看更改是否进行转到测试数据库。
-
我这样做了,
book = Books.objects.get(pk=1)我从夹具(test_database,“El Quijote”)中获得了名称。在响应中,我从主数据库“El Quijote Main”中获得了书名 -
尝试在您的 TestCase 中明确设置一个新的客户端实例。
def setUp(self): self.client = Client()可能是您的 TestCase 以某种方式获取了外部客户端。
标签: python django testing fixtures