JSHint认为Jasmine函数未定义

时间:2014-09-29 02:29:03

标签: javascript gruntjs jasmine karma-runner jshint

我有一个使用Karma + Jasmine和JSHint的Grunt设置。每当我在我的spec文件上运行JSHint时,我都得到一系列" undefined"错误,其中大部分是Jasmine的内置函数。例如:

Running "jshint:test" (jshint) task

   js/main.spec.js
      3 |describe("loadMatrix()", function() {
         ^ 'describe' is not defined.
      4 |    it("should not assign a value if no arg is passed.", function() {
             ^ 'it' is not defined.

(我还从我的规范要测试的JS文件中得到一些未定义的变量和函数错误,但我不确定为什么会这样,这可能是一个单独的问题。)

我的Karma配置文件中包含frameworks: [ "jasmine" ],我没有为JSHint设置任何全局变量,因为我没有.jshintrc个文件在Grunt中配置它。我确实尝试在我的Gruntfile中将Jasmine的函数添加为JSHint全局变量,但是将它们设置为truefalse并没有产生影响 - 错误仍然存​​在时JSHint跑了。

我错过了什么?我似乎无法做任何事情让JSHint在我的spec文件中跳过对Jasmine函数的定义检查。

4 个答案:

答案 0 :(得分:67)

您只需将"jasmine": true添加到.jshintrc文件中即可。

答案 1 :(得分:22)

小修正 - 应该有""在.jshintrc文件中的predef周围。

通过将其添加到jshint中的Gruntfile.coffee选项中来修复:

predef: [
    "jasmine"
    "describe"
    "xdescribe"
    "before"
    "beforeEach"
    "after"
    "afterEach"
    "it"
    "xit"
    "it"
    "inject"
    "expect"
    "spyOn"
]

.jshintrc

"predef": [
    "jasmine",
    "describe",
    "xdescribe",
    "before",
    "beforeEach",
    "after",
    "afterEach",
    "it",
    "xit",
    "it",
    "inject",
    "expect",
    "spyOn",
]

答案 2 :(得分:10)

我在Gruntfile.js中修复此问题,将jasmine: true添加到jshint任务的选项中:

jshint:
{
    options:
    {
        ...
        node: true,
        jasmine: true,
        ...
    },
    ...
},

与OP一样,我也没有使用.jshintrc文件。

答案 3 :(得分:0)

我相信其他答案是正确的,但我以前从未见过这样的例外,但我现在看到了。然后我注意到我的测试不在IIFE中。 所以我在这样的IIFE中移动它们,我不再得到这样的JSHINT警告。

(function () {

  describe('foo', () => {
     it('bar', () => {
        expect(1+1).toEqual(2);
     });
  });

})();