1

我正在设置 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' );
    });
4

1 回答 1

2

并非每个浏览器都支持该new Date('1980-2-23')语法。如果你想在每个浏览器中获得一致的结果,你应该使用一个库,比如moment.js

IE8:

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

>> new Date('1980-02-03').getDate() 
3
于 2013-06-24T14:58:10.333 回答