使用转义正则表达式特殊字符进行测试时字符串相等性失败

时间:2017-10-29 11:29:34

标签: javascript regex testing jestjs

我正在测试一个函数,它返回字符串的特殊字符的正则表达式转义版本,因此在测试中我正在测试它是否为equals to转义字符串,但它失败并说

Expected value to match:
  "4**2"
Received:
  "4\\*\\*2"

这是我写的测试:

describe("escapeRegExp", () => {
  // required for quotes test
  test("Escapes all RegExp characters", () => {
    expect(escapeRegExp("4**2")).toMatch("4\*\*2");});

其中escapeRegExp函数返回"4\*\*2"但它预期为"4**2"

但是当我使用

expect(escapeRegExp("4**2")).toMatchSnapshot("4\*\*2");它运作正常。

在使用.toBetoEqual() ??

进行检查时,知道它失败的原因

我是否需要添加任何其他字段/参数才能使其与toEqualtoMatchSnapshot一起使用才能实现此目的?

1 个答案:

答案 0 :(得分:1)

"4\*\*2"是一个根本不包含反斜杠的字符串4**2(因为\** - 因为\*不是已定义的转义序列字符串文字,*不需要在字符串文字中转义,\被忽略)。您的意思是"4\\*\\*2",即字符串4\*\*2。 E.g:

describe("escapeRegExp", () => {
  // required for quotes test
  test("Escapes all RegExp characters", () => {
    expect(escapeRegExp("4**2")).toMatch("4\\*\\*2");});

请注意,您传递的字符串toMatchSnapshot是可选的快照名称。您不使用toMatchSnapshot来测试文字值(使用toMatch)。有关快照测试的更多信息here