ビューをテストしているので、HttpResponseオブジェクトに送信する前に、コンテキストディクショナリに対していくつかのアサーションを作成して、ビューが期待どおりに計算を行っていることを確認する必要があります。しかし、どうすれば物事を主張できますか?これが私がビューでやろうとしていることの例です:
# some_app/views.py
def my_view(request):
context = RequestContext(request)
if request.GET.get('something'):
value = # calculate the value somehow
context.update(some_value=value)
elif request.GET.get('something_else'):
value = # calculate the value in other way
context.update(some_value=value)
# other stuff the view does
return render_to_response('some_template.html', context_instance=context)
コンテキストインスタンスを持つようにビューにパッチを適用できるかもしれません。
# some_app/tests/unit/test_myview.py
from some_app import views
from mock import patch
from django.test.client import RequestFactory
class MyTest(TestCase):
def test_my_view(self):
request = RequestFactory().get('some_url', data={
'param1': 'a',
'param2': 'b'
})
with patch('some_app.views', [WHAT DO I INCLUDE HERE?]) as context:
# by now, <context> should be the context instance created in the view
response = views.my_view(request)
self.assertTrue(context['some_value']['value1'])
self.assertFalse(context['some_value']['value2'])
self.assertRaises(IndexError, some_function,
context['some_value']['value1'])
しかし、私は実用的なアイデアを思い付くことができません:(
テストで、ビューで作成したコンテキストインスタンスを利用できるようにする方法はありますか?
助けてくれてありがとう:)
PSこの場合、ブラウザ内で生成されたhtmlをテストまたはチェックすることはできません:(