2015-05-11 2 views
3

Я сделал код:Строковая переменная не принимает "?" знак

element(by.className('charge')).getText() 
    .then(function(text){ 
     var blabla = "Is this my string?"; 

     expect(text.match(blabla)).toBe(true); 
     console.log(text); 
    }); 

И даже выводится из моей консоли равна моей переменной BlaBla, Я получаю результат:

Прогнозный [ «Это моя строка»] чтобы быть правдой.

без каких-либо ограничений? знак.

Как это возможно?

ответ

5

В качестве аргумента match является:

объект регулярного выражения. Если объект obj не RegExp передан, он неявно преобразуется в RegExp с помощью нового RegExp (obj).

Так что не передавайте ему строку. Явно передайте ему объект регулярного выражения (поскольку это связано с гораздо меньшей болью, которая преобразует строки в регулярное выражение и должна иметь дело с двумя уровнями синтаксиса, чтобы сбежать).

Регулярные выражения лечения ? как специальный символ (в контексте вашего кода это означает «g должен появиться 0 или 1 раз». Вы должны бежать знаки вопроса, если вы хотите, чтобы соответствовать им.

var blabla = /Is this my string\?/; 

Тем не менее, если вы хотите, чтобы соответствовать все строки, было бы проще просто сделать, что тест:

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

Аргумент 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().

+0

Спасибо! Вот и все! :) Извините за такой глупый вопрос – Yte

+0

@Yte, пожалуйста, примите ответ Квентина, поскольку он более подробный, чем мой. Рад помочь. – alecxe

1

вы вероятно misundertood, что 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 

Примечания это не имеет ничего общего с испытываемым двигателем вы используете (я не знаю), но там Propably лучшее способ сделать это, чем

expect(text === blabla).toBe(true); 

Something

expect(text, blabla).toBeEqual(); 

Так сообщение об ошибке довольно;)

0

Строковый аргумент, предоставленный match(), является регулярным выражением, а ? в этом контексте означает «соответствие предыдущему нольу или одному разу». Что он делает в вашем примере :-)

Вы можете явно избежать вопроса сделать, написав \?, и в этом случае поведение будет таким, как вы ожидаете.

Cheers,

Смежные вопросы