1

我在我的 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 任务甚至inline 指令,但 jshint 似乎并不关心。为了安全起见,我刚刚升级到最新版本,但仍然没有运气。

我现在可以使用// jshint ignore:line,但如果可能的话,我希望它与/*exported assert, expect */指令一起使用,因为我认为它更容易理解。

4

2 回答 2

2

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

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

我不确定为什么你实际上首先分配给这些变量......摩卡如何利用它们?我看不出在本地声明它们有什么作用。

于 2014-06-10T13:16:57.097 回答
1

不幸的是,我没有足够的声誉直接评论答案。但是,要为 James 的回答和 Reno 的后续评论添加一些内容。我相信通过将“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 文档提到导出指令应该与未使用的选项一起使用,但我不确定这意味着什么(也许这是您遇到导出问题的原因)

于 2014-06-11T09:17:04.230 回答