为什么错误字符串中有一些正斜杠?

时间:2019-03-29 12:15:38

标签: jestjs

这是我进行测试后的标准输出。

expect(received).toBe(expected) // Object.is equality

    Expected: "child 'path1' fails because ['path1' is not allowed to be empty]"
    Received: "child \"path1\" fails because [\"path1\" is not allowed to be empty]"

      39 |     } catch (error) {
      40 |       expect(error.name).toBe('ValidationError');
    > 41 |       expect(error.message).toBe("child 'path1' fails because ['path1' is not allowed to be empty]");
         |                             ^
      42 |     }
      43 |   });
      44 | });

      at Object.<anonymous> (src/__tests__/models/adChannel/googleadwords/AdGroupAd.spec.ts:41:29)

如您所见,Received值具有正斜杠\。它与Expected的值不匹配。

我认为也许字符串被转义了?我希望该字符串没有\

1 个答案:

答案 0 :(得分:1)

简短答案

将您的expect更改为此:

expect(error.message).toBe('child "path1" fails because ["path1" is not allowed to be empty]');

...它将起作用。


详细信息

JavaScript允许使用单引号'a string'或双引号"a string"定义字符串。

来自MDN doc

  

与其他语言不同,JavaScript在单引号和双引号之间没有区别

...因此,使用哪种方法都没关系。


在用双引号定义的字符串中,单引号可以很好地工作:

const singleQuotes = "has 'single quotes' in it";

...对于单引号定义的字符串中的双引号也是如此:

const doubleQuotes = 'has "double quotes" in it';

...但是如果单引号在用单引号定义的字符串中,则需要转义:

const singleQuotes = 'has \'single quotes\' in it';

...对于用双引号定义的字符串中的双引号也是如此:

const doubleQuotes = "has \"double quotes\" in it";

您在Jest输出中看到转义字符,因为Jest正在格式化输出字符串,并在其周围加上双引号,因此其中的双引号需要转义。