2016-06-08 60 views
4

我正在使用另一位開發人員編寫的一些qUnit測試,並且在理解爲什麼IE中的特定測試失敗時遇到了一些麻煩。爲什麼qUnit的assert.equal認爲這兩個字符串在IE中不同?

有一個函數可以將許多不同格式的字符串日期轉換爲UTC日期,並且它似乎正常工作。不過,我在IE中測試它時遇到了一些問題。

爲了測試它,我將函數的返回值(這是一個數字而不是標準的格式化日期),從它創建一個新的日期,然後使用JavaScript的toLocaleString()函數來獲取一個字符串,我可以比較我創建的另一個字符串。下面是一個測試的例子;減去對函數的調用,我用我從它得到的輸出替換了對函數的調用。

var expectedResult = "11/11/2000 12:56:00"; 
var actualResult = new Date(973947360000).toLocaleString(): 
assert.equal(expectedResult, actualResult); 

這種失敗,但我不明白爲什麼,我沒有使用deepEqual()和類型相同反正(我已經調試和檢查)。我認爲這可能歸結爲IE的編碼,但我不確定1,如何確定是這種情況,2,繞過它/有效地測試它。值得注意的是,這項測試在FF和Chrome中通過的情況良好,但Chrome在該日期的末尾添加了「PM」。

任何幫助將不勝感激。

下面是IE的輸出快照。

qUnit output difference

+0

你確定'toLocaleString()'沒有逗號嗎?當我執行它時,它會讓我看起來像'11/11/2000,12:56:00' – devnull69

+0

是的,如果您查看包含的圖像中的輸出,則不會看到逗號。 – Jelleh

+0

好的,所以我似乎已經設法通過調用toLocaleString後使用下面的一段代碼來解決問題。 '.replace(/ [^ - 〜]/g,'');' 從我的理解中,這是用空白字符串替換空格,但不是100%希望有人能夠並願意解釋這裏發生的事情。 – Jelleh

回答

1

看到,因爲沒有其他人與一個解釋,我要請選擇我的解決方法,因爲答案挺身而出。

看起來Internet Explorer中的.toLocaleString()對兩個日期之間的空間進行編碼的方式與JavaScript初始化的字符串不同。使用下面的代碼替換.toLocaleString()空間並允許有效評估這兩個值的相等性。

.replace(/[^ -~]/g, ''); 

正如我只需要知道所顯示的日期具有相同的值作爲輸入的日期,這是可以接受的。

+1

另請參閱:http://stackoverflow.com/questions/25574963/ies-tolocalestring-has-strange-characters-in-results – cmbuckley

+0

非常有趣,感謝您的信息。在提交我之前,我確實搜索過類似的問題,但以某種方式錯過了這個問題。非常感激。 – Jelleh

相關問題