2017-07-11 6 views
0

私はdjango settings.pyファイルを1つの構成済みデータベースに持ち、2つのmysqlデータベースにつなぎ、dbnametest_dbnameという名前にします。 テストデータベースを使用してdjango.test.Clientに応答する方法

は、これまでのところとても良い、 test_dbnameからオブジェクトを選択します

MyClass.objects.all() 

ようpython manage.py test ...、オブジェクトの選択のようなコマンドを実行している場合。一方

、私は

client = django.test.Client() 
response = client.post(...) 
その後、

テストコード(またはスレッド、私はよく分からない)を使用してHTMLページの生成をテストする場合client対象とpost引数の用途を作成しますtest_dbnameの場合、postを要求して応答を生成するスレッドはdbname(test_ prependedはありません)を使用します。

これは、不便である。そのような要求はHow to test a Django form with a ModelChoiceField using test client and post method

  • のような問題につながる、サーバ・スレッドのデータベースに依存しなければならない場合は私のテストコードが正しく要求(つまり、ポストデータ)を策定することはできません

    1. テスト中のデータベースは2つありますが、そのうちの1つの内容だけがテストコードから制御可能なように見えます。テストが予測できなくなります。

    サーバースレッドは、テストケーススレッドから制御できるデータベースを使用できますか?

  • +0

    テストクライアントのような別のスレッドを使用していません。私の場合では、これは

    により、テストケースを実行すなわち前に、ファイルのインポート時にsomequeryを走った
    class MyForm(forms.Form): my_field = forms.ChoiceField(choices=<somequery>) 

    のようなフォーム定義を置き換えることを意味しWSGIサーバーが実現します。 WSGIリクエストに応答するDjango関連の関数を直接呼び出します。クエリが間違ったデータベースを参照している場合は、テストデータベースが設定される前にクエリを実行する可能性が最も高いです。 – knbk

    +0

    ああ、ありがとう、それはそれを解決したようだ、以下の状況を説明します。 – Olivier

    答えて

    0

    おかげで、これを解決するヒントをknbkする:ユニットテストを開始する前に、答えは何のクエリが実行されるべきではないということです。

    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> 
    
    関連する問題