Django 客户端测试(get,post)响应从主数据库加载数据而不是测试数据库中加载的固定装置
Django client test (get, post) response load data from main db instead fixtures loaded in test db
我是 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
我确信测试数据库中的设备加载成功
最后我发现我做错了什么,感谢这个答案:
我有这样的表格:
class BookSellForm(forms.Form):
books = [('', 'Choose a book')]
books.extend(Books.objects.values_list('id', 'name'))
libro = forms.ChoiceField(books)
这就是问题所在,我不得不改成这个
class BookSellForm(forms.Form):
def __init__(self, *args, **kwargs):
super(BookSellForm, self).__init__(*args, **kwargs)
books = [('', 'Choose a book')]
books.extend(Books.objects.values_list('id', 'name'))
self.fields['book'] = forms.ChoiceField(books)
然后一切正常,我希望这对以后的人有所帮助。
我是 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
我确信测试数据库中的设备加载成功
最后我发现我做错了什么,感谢这个答案:
我有这样的表格:
class BookSellForm(forms.Form):
books = [('', 'Choose a book')]
books.extend(Books.objects.values_list('id', 'name'))
libro = forms.ChoiceField(books)
这就是问题所在,我不得不改成这个
class BookSellForm(forms.Form):
def __init__(self, *args, **kwargs):
super(BookSellForm, self).__init__(*args, **kwargs)
books = [('', 'Choose a book')]
books.extend(Books.objects.values_list('id', 'name'))
self.fields['book'] = forms.ChoiceField(books)
然后一切正常,我希望这对以后的人有所帮助。