Djangoフォームの単体テストの作成には少し問題があります。私は実際にはis_valid()メソッドをチェックし、例を見たがっているが、私のコードは機能していない。そして、Googleで1日かそこらを読んだ後、私はまだ私が探している答えを見つけることができなかった。以下は、私がテストケースを実行したときに私が得る唯一のもの」でありforms.pyとtest_forms.pyDjangoフォームのユニットテストでChoiceFieldとMultipleChoiceFieldが失敗しましたis_valid()
forms.py
class DataSelectForm(forms.Form):
#these are done in the init funct.
result_type = forms.ChoiceField(widget=forms.Select(attrs={'class': 'field-long'}))
band_selection = forms.MultipleChoiceField(widget=forms.SelectMultiple(attrs={'class': 'multiselect field-long'}))
title = forms.CharField(widget=forms.HiddenInput())
description = forms.CharField(widget=forms.HiddenInput())
def __init__(self, result_list=None, band_list=None, *args, **kwargs):
super(DataSelectForm, self).__init__(*args, **kwargs)
if result_list is not None and band_list is not None:
self.fields["result_type"] = forms.ChoiceField(choices=result_list, widget=forms.Select(attrs={'class': 'field-long'}))
self.fields["band_selection"] = forms.MultipleChoiceField(widget=forms.SelectMultiple(attrs={'class': 'multiselect field-long'}), choices=band_list
test_forms.py
def test_data_select_form(self):
results = ResultType.objects.all()
results_value = []
for result in results:
results_value.append(result.result_type)
bands = SatelliteBand.objects.all()
bands_value = []
for band in bands:
bands_value.append(band.band_name)
form_data = {'result_type': results_value, 'band_selection': bands_value, 'title': 'a title', 'description': 'some description'}
form = DataSelectForm(data = form_data)
print(form['title'].value())
print(form['description'].value())
print(form['result_type'].value())
print(form['band_selection'].value())
self.assertTrue(form.is_valid())
ためのコードがありますAssertionError:Falseは真ではありません "私はエラーを理解しています、なぜ私はそれを取得していません。私はすべてのデータを渡しています。私はprint文を実行するとそれを見ることができます。私はresult_typeとband_selectionを取って、それをform_dataの一部ではなくコンストラクタに渡そうとしましたが、どちらもうまくいきませんでした。私は何が欠けていますか?
アサーションステートメントの前に '' 'form.is_valid();を追加します。 print(form.errors) '' ' –
テストを最小限にして、動作させるために必要な最小限のデータを考えてください。 bands_valueの代わりに、['test band name]]を使うだけで、設定バンドとbands_valueのラインのヒープを削除することができます。これにより、テストがより速く読みやすくなります。 –