4

Django test.client を使用すると、次のようになります。

class MyTestCase(TestCase):
    def test_this(self):
        c = self.client
        response = c.get('/')
        assert False, response.context['name']

エラーが発生します:

assert False, response.context['name']
TypeError: 'NoneType' object is unsubscriptable

私の唯一の推測では、Jinja2 を使用すると、テスト時にコンテキストが表示されなくなります。

このテストは意図的に失敗するように設定されていることに注意してください。

4

4 に答える 4

1

@Rho がこのように提案したことを実行しました (ページ ロード テスト ファイルの冒頭)。

from jinja2 import Template as Jinja2Template
from django.test import signals

#note - this code can be run only once
ORIGINAL_JINJA2_RENDERER = Jinja2Template.render
def instrumented_render(template_object, *args, **kwargs):
    context = dict(*args, **kwargs)
    signals.template_rendered.send(
                            sender=template_object,
                            template=template_object,
                            context=context
                        )
    return ORIGINAL_JINJA2_RENDERER(template_object, *args, **kwargs)
Jinja2Template.render = instrumented_render

次に、応答コンテキストとテンプレート名を選択できます (ただし、この場合、response.template はリストではありません)。代わりにresponse.template[0].nameを使用する必要がありますresponse.template.name

于 2010-09-30T01:09:15.080 に答える
1

Django のサルは、メソッドをオーバーライドするTemplateクラスにパッチを適用して、シグナルを送信し、 .rendertemplate_renderedresponse.context

コードを掘り下げると、Jinja2 の Template クラスに対してこれを行うことができます。

于 2010-08-18T02:29:59.473 に答える
1

を読むつもりでしたTestCase。ドキュメントを熟読した後、エラーがあるように見えます。アサーションはTestCaseクラスのメソッドです。

class MyTestCase(TestCase):
  def test_this(self):
    response=self.client.get('/')
    self.assertEquals(response.context['name'],'Jim') 
于 2009-12-21T21:40:09.397 に答える