2016-10-28 12 views
0

私は.xmlファイルをアップロードするDjangoテストを設計しています。ファイルが正しい場合(スキーマによって検証されます)、プロジェクトのデータベースに追加されたデータです。ビューのコードのDjangoテストでフォームからClient.post()を使ってファイルをアップロードするにはどうすればよいですか?

パート:

​​

Iは、フォームの以下のクラスがある:

class UploadFileForm(forms.Form): 
    docfile = forms.FileField(
     label='Select a file', 
     help_text='.xml file' 
    ) 

形態が使用されているHTML:

<form action="{% url 'add_question_w_subject_topic' subject.id topic.id %}" enctype="multipart/form-data" method="post"> 
    {% csrf_token %} 
    <p>{{ form.non_field_errors }}</p> 
    <p>{{ form.docfile.label_tag }}</p> 
    <p> 
     {{ form.docfile.errors }} 
     {{ form.docfile }} 
    </p> 
    <p><input type="submit" value="Upload" /></p> 
</form> 

そして失敗したテスト:

def test_question_file_wrong_format(self): 
    c = Client() 

    script_dir = os.path.dirname(__file__) 
    rel_path = "xml_files/wrong_format.xml" 
    abs_file_path = os.path.join(script_dir, rel_path) 

    response = c.post('/add/question/'+ str(self.subj1.id) +'/' 
     + str(self.topc1.id) + '/', {'docfile': 
     open(abs_file_path, 'rb')}) 
    self.assertEquals(response.status_code, 200) 

お知らせこのライン:

response = c.post('/add/question/'+ str(self.subj1.id) +'/' 
      + str(self.topc1.id) + '/', {'docfile': 
      open(abs_file_path, 'rb')}) 

私はいくつかの方法を試してみました。それらのすべてで、私はthisを読んだ200

を期待していたが、それは、ステータスコード302を返し、私は自分のコードにその解決策を適応させるのに十分なそれを理解することはできません。

詳細が必要な場合は、教えてください。申し訳ありませんが既に答えられている質問です。

何か助けやヒントがあれば幸いです。ありがとう!

答えて

2

私は、ファイルシステムに触れることなく、テストケースで生成されたファイルを使用して、過去に若干異なり、これを行っている:

fake_file = ContentFile(b"Some file content") 
    fake_file.name = 'myfile.xml' 

    post_data = { 
     'title': "Test document", 
     'file': fake_file, 
    } 
    url = '/add/question/'+ str(self.subj1.id) +'/' + str(self.topc1.id) + '/' 
    response = self.client.post(url, post_data) 

は、それはあなたがcontent_type='multipart/form-data'でフォームを送信することが重要だ、という失敗。 Clientではなくself.clientを使用する場合は、data引数を含めると自動的に実行されます。 -------------------- てAssertionError :参照してくださいhttps://docs.djangoproject.com/en/1.10/topics/testing/tools/#django.test.Client.post

+0

は、私は、フォームの検証エラーを取得し、私はそれ –

+0

私はこのアプローチを試しにチェックしますありがとう------------------------------------------キャプチャされたstdoutコール----- -------------------------------------------------- --------

  • my_file
    • このフィールドは必須です。
Derek

+0

テストケースの次の行で、 'response.context ['form']。errorsを見て、原因を確認してください。 – nimasmi

関連する問題