为什么使用Django的assertInHTML()方法的测试用例失败?

时间:2018-03-05 07:23:35

标签: python django unit-testing

鉴于以下Django测试用例,为什么会失败?同样重要的是,我可以做些什么来测试HTML元素<form class="bc-form" id="update_template" action="" method="get" novalidate>的存在?

from django.test import TestCase
class Test_assertInHTML(TestCase):
    def test_something(self):
        needle = '<form class="bc-form" id="update_template" action="" method="get" novalidate>'
        haystack = '''<html>
                <form class="bc-form" id="update_template" action="" method="get" novalidate>
                    <table>
                        <tbody>
                            <tr><th>Template Name </th><td><select name="name" id="id_name"></select></td></tr>
                            <tr><th>Format </th><td><select name="format" id="id_format">
                                <option value="E">Email</option>
                                <option value="S">SMS</option>
                                </select>
                            </td></tr>
                            <tr><th>The message </th><td><textarea name="message" cols="40" rows="10" required id="id_message"></textarea></td></tr>
                        </tbody>
                    </table>
                    <input type="submit" value="Submit">
                </form>
            </html>'''
        self.assertInHTML(needle, haystack, count=1)

1 个答案:

答案 0 :(得分:1)

你的针是一个不完整的HTML片段,它不是有效的HTML。

documentation for assertInHTML表明两个参数(needle和haystack)必须是有效的HTML。解析器首先验证HTML并丢弃任何无效的内容 - 因此您的测试失败。

如果您只是想测试渲染开始表单标记,那么您需要进行简单的字符串比较,而不是使用assertInHTML