【问题标题】:Django client test (get, post) response load data from main db instead fixtures loaded in test dbDjango 客户端测试(获取、发布)响应从主数据库加载数据,而不是在测试数据库中加载固定装置
【发布时间】: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


【解决方案1】:

感谢这个答案,我终于发现了我做错了什么:Django: reload form data after db values change

我有一个这样的表格:

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)

然后一切正常,我希望这对将来的人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    相关资源
    最近更新 更多