DjangoのRequestFactoryを使用して簡単なテストを行いました。私の見解では、自分自身でテストしたい状態をいくつか設定しています(これは素晴らしい例ではありませんが、要求が処理された後でビューのいくつかの状態を正当な理由でHTMLから解析するのではなく、 ):私は、要求を処理するために使用されるビューのインスタンスを取得する方法を見ることができない内部を見てみるとDjangoの "as_view"メカニズムからCBVインスタンスを取得するためのより良い方法があります
def some_test(self):
rf = RequestFactory()
get_request = rf.get('/foo/')
view = MyView.as_view()
response = view(
get_request,
foo="hello",
bar="world"
)
self.assertEquals(??.sentence_to_display, "hello world")
、??
はget
セットself.sentence_to_display
で最高のビューインスタンスのための私のプレースホルダです私はCBVでdispatch
を無効にしています:
def dispatch(self, request, *args, **kwargs):
request.META["__the_view__"] = self
return super(MyView, self).dispatch(request, *args, **kwargs)
はその後のような私のテストを変更:
def some_test(self):
rf = RequestFactory()
get_request = rf.get('/foo/')
view = MyView.as_view()
response = view(
get_request,
foo="hello",
bar="world"
)
self.assertEquals(get_request['__the_view__'].sentence_to_display, "hello world")
私の例は、任意であるが、私のCBVは、テンプレートを経由してHTMLをレンダリングする前に、物事の多くを計算する方法がたくさんあります。私はDjangoがテンプレートをレンダリングすると信じています。私はそのようなテンプレートをテストしたくないので、呼び出された後にCBVメソッドとインスタンスの状態をテストしたいと思います。
私が実際に使っているのは、というメソッドを単体テストしてレスポンスをビルドしたいときに、BeautifulSoupを使って膨大な量の出力を掘り起こしたくないということです。
もっと良いアプローチはありますか?私はポイントを逃していますか?
多くのありがとうございます。
ジャンゴ1.6は、残念ながら
うん、私はメカニックを理解しています。 as_view()によって返された内部関数を再実装するために過剰な使い方があると感じますが、テストの場合はおそらくテスト対象のビューをクリーンに保ちます。提案していただきありがとうございます。 –