jshint exports指令不起作用

时间:2014-06-09 15:27:16

标签: gruntjs jshint grunt-contrib-jshint

我在我的gruntfile中设置了一个mocha任务,它在测试开始之前加载了一些测试库。这是它的样子:

    mochaTest: {
        unit: {
            options: {
                reporter: 'spec',
                require: function(){
                    var chai = require('chai');
                    var chaiAsPromised = require('chai-as-promised');
                    chai.use(chaiAsPromised);
                    /* exported assert, expect */
                    var assert = chai.assert;
                    var expect = chai.expect;
                    chai.should();
                }
            },
            src: ['backend/test/**/*.js']
        }
    },

所以jshint抱怨说我没有在gruntfile中使用assert和expect。我已尝试将exported添加到.jshintrc文件,jshint grunt task甚至inline directive,但jshint似乎并不关心。我刚刚升级到最新版本以保证安全,但仍然没有运气。

我现在可以使用// jshint ignore:line来解决这个问题,但如果可能的话,我希望能够使用/*exported assert, expect */指令,因为我觉得这更容易理解。

2 个答案:

答案 0 :(得分:2)

如果在分配外部范围之前声明变量,则可以解决错误:

var assert, expect;
whatever({
    mochaTest: {
        unit: {
            // ...
            require: function () {
                // ...
                assert = chai.assert;
                expect = chai.expect;
            }
        }
    }
});

我不确定你为什么实际上首先分配这些变量,但是......摩卡如何使用它们?我不知道如何在当地声明他们做任何事情。

答案 1 :(得分:1)

不幸的是,我没有足够的声誉直接评论答案。然而,要从詹姆斯和随后的里诺评论中添加一些答案。我相信通过添加' var'声明到您的gruntfile,您将变量设置为该文件的本地变量,因此无法在测试中访问它们。正如我所看到的,你必须配置JSHint以允许这些全局变量,如果你想将它们用作全局变量(这是你正在做的事情,这是有意义的)。您无法通过将其设置为本地

来解决此问题

因此我认为以下方法会按照你想要的方式工作(虽然我没有机会测试它)

/* exported assert, expect */

...

    mochaTest: {
    unit: {
        options: {
            reporter: 'spec',
            require: function(){
                var chai = require('chai');
                var chaiAsPromised = require('chai-as-promised');
                chai.use(chaiAsPromised);
                assert = chai.assert;
                expect = chai.expect;
                chai.should();
            }
        },
        src: ['backend/test/**/*.js']
    }
},

JSHint文档提到导出的指令应该与未使用的选项一起使用,但我不确定它的含义(可能是你遇到导出问题的原因)