2

我有一个 div,其中包含一个设置图标,它是一个 html 杂项符号

<span class="settings-icon">&#9881;</span>

我有一个茉莉花测试来检查 div 内容以确保它没有被更改。

  it("the settings div should contain &#9881;", function() {
    var settingsIconDiv = $('.settings-icon');
     expect(settingsIconDiv.text())
       .toContain('&#9881;');
  });

它不会通过,因为它被评估为齿轮图标的字形符号⚙</p>

如何解码字形以通过测试?

4

3 回答 3

3

要从 Unicode 获取实际字符以将其与 HTML 中的文字进行比较,您可以使用String.fromCharCode()例如

.toContain(String.fromCharCode(9881))
于 2013-06-26T15:05:51.837 回答
2

您应该检查字符串'⚙',或者,如果您不知道如何在代码中输入它,请检查转义符号\u2699。还有其他更笨拙的方法来构造包含字符的字符串,但最好是简单。

无论字符在 HTML 源代码中是如何编写的(例如,作为引用&#9881;),它在 DOM 中都以字符本身的形式出现,U+2699。在 JavaScript 中,类似的字符串&#9881;只是一个由七个 Ascii 字符组成的序列(尽管您可以将其传递给将其解析为 HTML 字符引用的函数,或者您可以将其分配给例如innerHTML属性,从而导致 HTML 解析,但这是相当毫无意义且令人困惑)。

于 2013-06-26T17:04:35.427 回答
1

为了匹配浏览器行为(因为你不知道它是如何在 html 或文本中编码的)我会尝试以下

.toContain($("<span>&#9881;</span>").text())而不是.toContain('&#9881;').

这样它应该与它在 dom 中的存储方式相匹配。

String.fromCharCode(9881);提到的肯定Yuriy Galanter也可以可靠地工作。但由于 dom 引擎和 js 引擎是两个不同的部分,其行为可能会有所不同,因此我将使用这两种技术进行测试。

于 2013-06-26T15:03:04.943 回答