我正在设置grunt.js来运行qunit测试,对于某些测试,grunt会失败。失败的测试(4个测试中有3个失败)都是我添加一个整数,其中一个字符串隐式导致字符串连接。如果我在浏览器,浏览器控制台和使用该代码的网页中手动运行测试,这样可以正常工作。
这里发生了什么,我该如何解决?
grunt输出
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' );
});
答案 0 :(得分:2)
每个浏览器都不支持new Date('1980-2-23')
语法。如果您希望在每个浏览器中获得一致的结果,则应使用库,例如moment.js。
IE8:
>> new Date('1980-2-23').getDate()
NaN
>> new Date('1980-02-03').getDate()
3