繁体   English   中英

Django客户端测试(获取,发布)响应从主数据库加载数据,而不是从测试数据库加载夹具

[英]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 

链接到该路径的view方法应该从数据库中加载一些数据,然后进行渲染。 但是当我跑步时

python manage.py test app_name

它不会从固定装置加载数据,因为响应中不包含“ El Quijote”。 只有在我跑步时:

python manage.py loaddata fixture_name.yaml ...

然后再次运行测试,以查看方法从数据库中加载数据。

所以我得出结论,当我运行测试时,我的视图方法从主数据库而不是测试数据库加载数据

我做错了什么? 有没有一种方法可以只从测试数据库中加载数据?

django版本:1.9.4

python版本:2.7.6

我确定夹具会在测试数据库中成功加载

最后,由于以下答案,我发现自己在做错什么: Django:更改db值后重新加载表单数据

我有这样的形式:

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)

然后一切都很好,我希望这对将来的人会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM