这是我进行测试后的标准输出。
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
的值不匹配。
我认为也许字符串被转义了?我希望该字符串没有\
答案 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
正在格式化输出字符串,并在其周围加上双引号,因此其中的双引号需要转义。