字符串变量不接受"?"符号



我用:

制作了代码
element(by.className('charge')).getText()
    .then(function(text){
        var blabla = "Is this my string?";
        expect(text.match(blabla)).toBe(true);
        console.log(text);
    });

,甚至是我的控制台的输出等于我的blabla变量,我会得到结果:

期望['这是我的字符串']是真的。

没有任何"?"签名。

怎么可能?

match的参数为:

正则表达式对象。如果传递了非regexp对象OBJ,则使用新的Regexp(obj)将其隐式转换为REGEXP。

所以不要将其传递给字符串。明确地将其传递给正则表达式对象(因为这涉及将字符串转换为正则表达式并必须处理两个级别的语法以逃脱的疼痛要少得多)。

正则表达式将?视为特殊字符(在您的代码上下文中,这意味着" g应该出现0或1次"。如果您想匹配它们,则需要逃脱问号。

var blabla = /Is this my string?/;

也就

var blabla = "Is this my string?";
expect(text).toBe(blabla);

match的参数是正则表达式,其中 ?具有特殊的含义。您可能是指toEqual()

expect(element(by.className('charge')).getText()).toEqual("Is this my string?");

如果您想要正则表达式匹配,请制作正则表达式对象并使用toMatch()

var blabla = /Is this my string?/;
expect(element(by.className('charge')).getText()).toMatch(blabla);

请注意,在量角器中, expect()被"修补"以隐式解决承诺,而您不需要使用then()

您可能会误解match方法在JS字符串中所做的:

https://developer.mozilla.org/en/docs/web/javascript/reference/global_objects/string/match

它基本上将使用正则返回匹配的组,因此,在这种情况下

< ("Is this my string").match("Is this my string?");
> ["Is this my string"]

答案是正确的。您想做的就是简单地比较字符串,只是做:

< "Is this my string" === "Is this my string?";
> false

请注意,这与您使用的测试引擎无关(我不知道),> ,与

相比,这是一种更好的方法
expect(text === blabla).toBe(true);

某物

expect(text, blabla).toBeEqual();

所以错误消息很漂亮;)

match()提供的字符串参数是正则表达式,在此上下文中的 ?表示"匹配上一个零或一次匹配"。它在您的示例中做到了: - )

您可以通过编写?明确逃避问题,在这种情况下,行为将如您期望。

欢呼,

最新更新