Django- 《Python Web开发测试驱动开发》的一个检测期望模版的问题

问题描述

最近在阅读《Python Web开发测试驱动开发》一书, 在本书第4.3章 遵守“不测试常量“规则,使用模板解决这个问题一节中, 介绍了以下方法用以测试是否渲染了正确的模板

 from django.template.loader import render_to_string
[...]
  def test_home_page_returns_correct_html(self):
    request = HttpRequest()
    response = home_page(request)
    expected_html = render_to_string('home.html')
    self.assertEqual(response.content.decode(),expected_html)

在没有读到第5.2节 在服务器中处理POST请求 之前, 该部分代码工作的很好,但是自从在html文件中引入了表单, 加入了{% csrf_token %} 之后, 这个测试就回返回失败。具体的错误信息如下:

    self.assertEqual(response.content.decode(), expected_html)
AssertionError: u'\n\t\n\t\tTo-Do lists\n\t
\n\t\n\t\t

Your To-Do list

\n\t\t
\n\t\t\t \n\t\t\t\n\t\t
\n\t\t\n\n\t\t
\n\t\n\n' != u'\n\t\n\t\tTo-Do lists \n\t\n\t\n\t\t

Your To-Do list

\n\t\t
\n\t\t\t\n\t\t\t \n\t\t
\n\t\t\n\n\t\t
\n\t\n\n'

从错误提示信息来看,就是因为引入了{% csrf_token%}的原因导致的 。

解决办法

用百度搜索了一下,大多是反馈,该问题是因为在《Python Web开发测试驱动开发》书中所要求的Django版本是1.8版本, 笔者使用的Django 版本是1.11版本,笔者相信将版本降级到1.8版本肯定可以解决该问题。

但是,没有办法,我懒得去降级

又搜索了一下,结果发现了这个网站
Python Web开发测试驱动开发
貌似是本书的官方网站, 在线上的最新版本上, 作者已经给出了以下解决办法

    def test_home_page_returns_correct_html(self):
        response = self.client.get('/')
        self.assertTemplateUsed(response,'home.html')

实测在Django 1.11 和Python 2.7版本下,可以运行通过。

后话

《Python Web开发测试驱动开发》标价99,记得京东购入好像是61。=.=
有需要的同学,不妨先可以在官网上看一下电子版

你可能感兴趣的:(Django- 《Python Web开发测试驱动开发》的一个检测期望模版的问题)