题 JSHint认为Jasmine函数未定义


我有一个使用Karma + Jasmine和JSHint的Grunt设置。每当我在我的spec文件上运行JSHint时,我都会遇到一系列“未定义”的错误,其中大部分是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全局变量,但是将它们设置为 true 要么 false 并没有什么区别 - 当JSHint运行时,错误仍然存​​在。

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


29
2017-09-29 02:29


起源


您使用的是什么版本的Karma? - Mario Araque
karma 0.12.23,karma-jasmine 0.2.0。 - Ian128K


答案:


你可以添加 "jasmine": true 到你的 .jshintrc 文件。


66
2017-11-25 21:18



github.com/sbt/sbt-jshint/issues/13 - Arepalli Praveenkumar


MINOR CORRECTION - .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",
]

22
2017-10-01 02:55



莱昂的答案 应该是公认的答案,因为它的定义要短得多 "jasmine": true - Ande


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

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

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


10
2018-01-04 05:27



只是我在寻找。 :) - Francis Rodrigues


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

(function () {

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

})();

0
2017-12-11 13:14