我正在设置 grunt.js 来运行 qunit 测试并且对于某些测试 grunt 失败。失败的测试(4 个测试中有 3 个失败)都是我添加一个带有字符串的整数隐式导致字符串连接的地方。如果我在浏览器、浏览器控制台和使用代码的网页中手动运行测试,这很好用。
这里发生了什么,我应该如何解决它?
咕噜声输出
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' );
});