簡體   English   中英

如何使用測試數據庫響應django.test.Client

[英]How to respond to django.test.Client using the test database

我有一個django settings.py文件,其中包含一個已配置的數據庫,該數據庫指向兩個mysql數據庫,我們將它們稱為dbnametest_dbname

運行諸如python manage.py test ...類的命令時,對象選擇如

MyClass.objects.all()

test_dbname ,將從test_dbname選擇對象。

另一方面,如果我使用以下方法測試html頁面的生成

client = django.test.Client()
response = client.post(...)

然后創建client對象和post參數的測試代碼(或線程,我不確定)使用test_dbname而用於post請求並生成響應的線程使用dbname (不帶test_前綴)。

這是一個不便,因為:

  1. 如果此類請求應取決於服務器線程的數據庫,則我的測試代碼無法正確地制定請求(即發布數據),從而導致諸如如何使用測試客戶端和發布方法使用ModelChoiceField測試Django表單之類的問題
  2. 現在有兩個數據庫正在測試中,而其中只有一個數據庫的內容似乎可以從我的測試代碼中控制,這使測試變得不可預測。

我可以使服務器線程使用可以通過測試用例線程控制的數據庫嗎?

感謝knbk提供了解決此問題的提示:答案是在單元測試開始之前不應運行任何查詢。 在我的情況下,這意味着替換諸如

class MyForm(forms.Form):
    my_field = forms.ChoiceField(choices=<somequery>)

somequery在導入文件之前,即測試用例跑,通過:

class MyForm(forms.Form):
    my_field = forms.ChoiceField()
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(self, *args, **kwargs)
        self.fields['my_field'].choices = <somequery>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM