2015-05-11 109 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); 
    }); 

即使是我的控制檯輸出等於我布拉布拉變量, 我得到的結果:

預期[「這是我的字符串」]是真實的。

沒有任何「?」標誌。

這怎麼可能?

回答

5

的參數爲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); 
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); 

東西

expect(text, blabla).toBeEqual(); 

所以錯誤消息是相當;)

0

提供給match()的字符串參數是一個正則表達式,在此上下文中的?表示「匹配先前的零次或一次」。它在你的例子中所做的:-)

你可以通過編寫\?明確地逃避問題,在這種情況下,行爲將如你所願。

乾杯,