2014-06-09 28 views
1

我已经在我的gruntfile中设置了一个mocha任务,它在测试开始之前加载了一些测试库。这是它看起来像这样:jshint导出指令不工作

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。我试过将exported添加到.jshintrc文件,jshint grunt task甚至inline directive但jshint似乎并不在乎。我刚刚升级到最新版本以保证安全,但仍然没有运气。

我现在可以使用// jshint ignore:line,但如果可能的话,我想用/*exported assert, expect */指令来处理这个问题,因为我认为它更容易理解。

回答

1

很抱歉,我没有足够的知名度直接对答案发表评论。然而,为詹姆斯的回答和雷诺随后的评论增加了一些内容。我相信通过向gruntfile添加'var'声明,您可以使变量局部于该文件,因此它们无法在测试中访问。正如我所看到的,如果你想将它们作为全局变量来使用,你必须配置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文档中提到的方法导出的指令应该与未使用的选项一起使用,但我不确定这是什么意思(也许这是你遇到导出问题的原因)

+0

测试过它,只要你不是'严格模式',它就会工作。 +1和我的谢意! – Renaud

2

如果您分配给他们之前宣布在外部范围的变量,你可以解决的错误:

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

我不知道为什么你实际上是摆在首位分配给这些变量,虽然......摩卡如何利用它们?我不知道如何在本地宣布他们做任何事情。

+0

好点,我认为这些变量会自动导出到测试但没有。 'should'语法按预期工作,但'expect'和'assert'未定义。感谢您指出了这一点! – Renaud

+0

我想我误以为你可以通过**在[grunt-mocha-test](https://www.npmjs.org/package/grunt-mocha-test)指定编译器**代码示例导出变量。 npm页面。 – Renaud

+0

用var关键字声明变量,即使在顶级作用域,也不会使它们成为全局变量(即在其他所需脚本中不可用) – Renaud