grunt.js声称NaN浏览器没有

时间:2013-06-24 14:50:57

标签: javascript node.js gruntjs qunit

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

1 个答案:

答案 0 :(得分:2)

每个浏览器都不支持new Date('1980-2-23')语法。如果您希望在每个浏览器中获得一致的结果,则应使用库,例如​​moment.js

IE8:

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

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