私は過去2日間、WebTestで発生している問題を理解しようとしてWebを検索してきました。しかし、私には喜びがなく、ここの誰かが助けてくれるのではないかと思っていました。
開発中のWebアプリケーションでnoseを使用してテストを実行していますが、ファイルアップロードフィールドが含まれているフォームで問題が発生しているようです。フォームと検証は、サーバーが正常に実行されているときに機能します。シェルからテストコードを実行すると、同様に機能します。ただし、テストコードを鼻から実行すると、送信された情報を受け入れることができません。
フォームの例を次に示します。
<form method="POST" enctype="multipart/form-data" action="....">
<input type="text" name="first_name" id="first_name">
<input type="text" name="last_name" id="last_name">
<input type="file" name="thumbnail" id="thumbnail">
<input type="submit" value="Create" name="submit" id="submit">
</form>
私のWebTestコードは次のようになります。
response = self.app.get( url(controller=self.controller, action='create') )
form = response.form
log.debug( form.submit_fields() )
form.set('first_name', 'test1-1')
form.set('last_name', 'test1-1')
form.set('thumbnail', '')
log.debug( form.submit_fields() )
response = form.submit()
これを実行すると、フォームバリデーターでフィールドが必須ではないにもかかわらず、送信された値からサムネイルが欠落しているという応答が返されます。Noseからのコード出力を比較し、シェルを介して実行すると、submit_fieldsからの出力が異なることに気付きました。
シェル出力:
[('first_name', ''),('last_name', '')] #First log call
[('first_name', 'test1-1'),('last_name', 'test1-1'), ('thumbnail', '')] #Second log call
鼻の出力:
[(u'first_name', ''), (u'last_name', ''), (u'thumbnail', <File name="thumbnail" id="thumbnail">)] #First log call
[(u'first_name', 'test1-1'), (u'last_name', 'test1-1'),(u'thumbnail', <File name="thumbnail" id="thumbnail">)] #Second log call
ご覧のとおり、シェルにはサムネイルタプルがないという違いがありますが、問題なく通過する空の文字列に設定されています。ただし、Noseにはすでにタプルがあり、値はリセットされません。誰かがこれを手伝ってくれますか?form.submitアプローチを使用するときに、WebTestでマルチパートフォームを試すことに問題はありますか?
よろしくお願いします。
ライブラリ情報:Pylons-1.0.1 WebTest-1.4.0 WebOb-1.2.3 nose-1.2.1