【问题标题】:jshint exported directive not workingjshint 导出指令不起作用
【发布时间】:2014-07-30 04:25:39
【问题描述】:

我在我的 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 */ 指令来解决这个问题,因为我认为它更容易理解。

【问题讨论】:

    标签: gruntjs jshint grunt-contrib-jshint


    【解决方案1】:

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

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

    我不知道你为什么实际上首先分配给这些变量...... Mocha 如何使用它们?我根本看不出在本地声明它们有什么作用。

    【讨论】:

    • 好点,我认为这些变量会自动导出到测试中,但没有。 should 语法按预期工作,但未定义 expectassert。感谢您指出这一点!
    • 我想我被误导了,认为您可以通过grunt-mocha-test npm 页面上的指定编译器代码示例导出变量。
    • 使用 var 关键字声明变量,即使在顶级范围内,也不会使它们成为全局变量(即在其他必需的脚本中不可用)
    • 是的,我知道,我不是这个意思。似乎将它们移到那里可以防止 JSHint 错误。我不知道 Mocha 想让你如何声明它们。
    【解决方案2】:

    不幸的是,我没有足够的声誉直接评论答案。但是,要为 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 文档提到,exported 指令应该与未使用的选项一起使用,但我不确定这意味着什么(也许这是您遇到导出问题的原因)

    【讨论】:

    • 对其进行了测试,只要您不在“严格模式”下,它就可以工作。 +1,谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-17
    • 2017-12-06
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    相关资源
    最近更新 更多