同じテストケースクラスの別のテストに合格するアサーションで失敗する単体テストがあります。
合格テストは次のとおりです。
def test_home(self):
c = Client()
resp = c.get('/')
self.assertEqual(resp.status_code, 200)
self.assertTrue('a_formset' in resp.context)
失敗したテストは次のとおりです。
def test_number_initial_number_of_forms(self):
c = Client()
resp = c.get('/')
self.assertEqual(resp.context['a_formset'].total_form_count(), 1)
2番目のテストでは、エラーが発生しますTypeError: 'NoneType' object has no attribute '__getitem__'
。
2番目のテストを次のように実行すると
def test_number_initial_number_of_forms(self):
c = Client()
resp = c.get('/')
self.assertTrue('a_formset' in resp.context)
self.assertEqual(resp.context['a_formset'].total_form_count(), 1)
エラーが発生しますTypeError: argument of type 'NoneType' is not iterable
。2番目のテストのprintステートメントを使用して、response.contentに取得する予定のページが含まれていること、ステータスコードが正しいこと、およびテンプレートが正しいことを確認しました。ただし、応答のコンテキストは一貫None
して2番目のテストにあります。
Djangoの単体テストを標準の「pythonmanage.pytest...」インターフェースで実行しているので、「コンテキストがシェルから空です」という問題が発生しているとは思いません。
これで何が起こっているのですか?
編集:
print type(resp.context['a_formset'])
各テストに追加すると、動作テストに対してが得られ<class 'django.forms.formsets.AFormFormSet'>
ます。動作しないテストについては、私はTypeError: 'NoneType' object has no attribute '__getitem__'
再び取得します。