我在我的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 */
指令,因为我觉得这更容易理解。
答案 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文档提到导出的指令应该与未使用的选项一起使用,但我不确定它的含义(可能是你遇到导出问题的原因)