4

カスタム検証関数がありますが、Django が提供する unittest フレームワークを使用して、想定されているエラーをスローしていることをテストしたいと思います。

関数を直接呼び出してそのようにテストすることもできますが、ビューで適切に使用されているかどうかは保証されません (つまり、統合テストを実行したい)。

非フィールド固有の検証エラーをテストするdjangoの方法は何ですか?

たとえば、電子メール フィールドは、入力されたテキストが有効な電子メール アドレスであるかどうかをテストしますが、フィールド以外のエラーがフォームの上に表示され、どのフィールドとも関係がありません。たとえば、そのメールアドレスはすでに登録されていると言うでしょう。

アプリケーションをテストするとき、これらのフィールド以外の検証エラーをどのようにテストしますか?

4

2 に答える 2

4

を使用して、フォームのエラーをテストできますassertFormError()

フォーム上でレンダリングされたときに、フォーム上のフィールドが提供されたエラーのリストを発生させることをアサートします。

contextフォーム名は、検証に使用している実際のフォームではなく、フォームの名前である必要があることに注意してください。

次のように使用できますnon_field_errors(どのフィールドにも関係のない一般的なエラー)。

self.assertFormError(response, 'form', None, 'Some error')

次のように、特定のフィールド エラーをテストできます。

self.assertFormError(response, 'form', 'field_name', 'Some error')

テストするエラーのタプルを渡すこともできます。

errors = ['some error 1', 'some error 2']
self.assertFormError(response, 'form', 'field_name', errors)
于 2015-12-04T09:14:22.587 に答える
0

フィールドを検証するカスタム関数を作成し、form.is_valid() の代わりに呼び出します。

Django docs は、これに関する詳細な説明を提供します。以下のリンクを確認してください。

https://docs.djangoproject.com/en/dev/ref/forms/validation/#form-field-default-cleaning

例: django インポート フォームから

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    email = forms.EmailField(required=False)
    message = forms.CharField(widget=forms.Textarea)

def clean_message(self):
    message = self.cleaned_data['message']
    num_words = len(message.split())
    if num_words < 4:
        raise forms.ValidationError("Not enough words!")
    return message

Herr clean_message は私のカスタム検証メソッドになります

于 2012-06-12T06:04:10.573 に答える