3.7
TDD中“单元测试/编写代码”循环:
1. 在终端里运行单元测试,看他们是如何失败的;
2. 在编辑器中改动最少量的代码,让当前失败的测试通过。
然后不断重复。
4.3
不要测试常量,应该测试实现的方式。
5.1
坑6:form元素添加POST后页面会因为运行代码过快刷新导致测试时无法捕捉到id为id_list_table的元素
在刷新后添加time.sleep(3)等待其刷新完成即可
5.2
测试结构:设置配置-执行代码-编写断言
坑7:添加csrf_token后会导致test_home_page_returns_correct_html测试通过不了,因为django会将csrf_token解释为一串input元素,注释也没意义
先删掉csrf_token,测试就能通过(比较无脑)
另一种方法是用正则表达式将其处理掉。
将通过request返回的html打印出来,会看到多了一串csrf_token衍生出来的东西
<input type='hidden' name='csrfmiddlewaretoken' value='tl2rZy1RBSLY75DD2ysZ4KHF0DePGWQs' />
这一串东西在render_to_string方法中是不会渲染出来的,这就导致了直接渲染的结果和通过请求返回的结果不相等。按照书中的精神,编制少量代码,让测试通过,我用正则表达式将其去掉,保证其两边的相等。
CSRF_REGEX = r'<input[^>]+csrfmiddlewaretoken[^>]+>'
self.assertEqual(re.sub(CSRF_REGEX, '',response.content.decode()), expected_html)