2013-06-24 24 views
1

我設置grunt.js來運行qunit測試,對於某些測試grunt失敗。失敗的測試(4次測試中有3次失敗)都是我用一個字符串隱式地添加一個整數的字符串連接。如果我在瀏覽器,瀏覽器控制檯和使用該代碼的網頁中手動運行測試,此工作正常。grunt.js聲稱NaN瀏覽器不是

這裏發生了什麼,我該如何解決?

咕嚕輸出

Running "qunit:all" (qunit) task 
Testing html_client/tests.html F.......... 
>> CommonTests - Test getDateAsString 
>> Message: null 
>> Actual: "NaN-NaN-NaN" 
>> Expected: "1980-02-13" 
>> at file:... 

>> CommonTests - Test getDateAsString 
>> Message: null 
>> Actual: "NaN-NaN-NaN" 
>> Expected: "1980-12-03" 
>> at file:... 

>> CommonTests - Test getDateAsString 
>> Message: null 
>> Actual: "NaN-NaN-NaN" 
>> Expected: "1980-02-03" 
>> at file:... 

測試代碼

QUnit.test("Test getDateAsString", function() { 
     QUnit.equal(Common.getDateAsString(new Date('1980-2-13')), '1980-02-13'); 
     QUnit.equal(Common.getDateAsString(new Date('1980-12-3')), '1980-12-03'); 
     QUnit.equal(Common.getDateAsString(new Date('1980-12-13')), '1980-12-13'); 
     QUnit.equal(Common.getDateAsString(new Date('1980-2-3')), '1980-02-03'); 
    }); 

代碼

var getDateAsString = function(date) { 
     var dd = date.getDate(); 
     var mm = date.getMonth() + 1; // January is 0! 
     var yyyy = date.getFullYear(); 

     return yyyy + '-' + ((mm < 10) ? '0' + mm : mm) + '-' + ((dd < 10) ? '0' + dd : dd); 
    }; 

求解

重寫測試,因此解決了這個問題。

QUnit.test("Test getDateAsString", function() { 
     QUnit.equal(Common.getDateAsString(new Date(1980, 1, 13)), '1980-02-13'); 
     QUnit.equal(Common.getDateAsString(new Date(1980, 11, 3)), '1980-12-03'); 
     QUnit.equal(Common.getDateAsString(new Date(1980, 11, 13)), '1980-12-13'); 
     QUnit.equal(Common.getDateAsString(new Date(1980, 1, 3)), '1980-02-03'); 
    }); 

回答

2

new Date('1980-2-23')語法在每個瀏覽器中都不受支持。如果您希望在每個瀏覽器中獲得一致的結果,請使用庫,如moment.js

IE8:

>> new Date('1980-2-23').getDate() 
NaN 

>> new Date('1980-02-03').getDate() 
3 
+0

你是正確的,但我只着眼於支持最新的文檔(手機瀏覽器)。它也不能解釋爲什麼四個測試用例中只有三個失敗,所有四個測試用例都會失敗並顯示你的解釋。對? – MdaG

+0

@MdaG帶適當填充作用的語法,例如'new Date('1980-12-13')'應該是在這裏通過 – Esailija

+0

@MdaG的語法,句法必須精確地爲'yyyy-mm-dd',兩位數都是月份和日期。最新的移動瀏覽器也不能與最新的桌面瀏覽器進行比較。他們缺乏桌面上的功能。 – user568109