Подтвердить что ты не робот

JSHint считает, что функции Жасмина undefined

У меня есть настройка Grunt, которая использует Karma + Jasmine и JSHint. Всякий раз, когда я запускаю JSHint в своем spec файле, я получаю серию ошибок "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.

(Я также получаю некоторые ошибки undefined для переменных и функций из JS файла, которые моя спецификация предназначена для тестирования, но я не уверен, почему это так, и это может быть отдельной проблемой.)

В моем конфигурационном файле My Karma есть frameworks: [ "jasmine" ], у меня нет никаких глобальных наборов для JSHint, и у меня нет файла .jshintrc, так как я настраиваю его в Grunt. Я попытался добавить функции Jasmine в качестве JSHint-globals в моем файле Grunt в какой-то момент, но установка их как либо true, так и false не повлияла - ошибки все еще сохранялись при запуске JSHint.

Что мне не хватает? Я не могу ничего сделать, чтобы заставить JSHint пропустить проверку определений функций Jasmine в моем файле spec.

4b9b3361

Ответ 1

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",
]

Ответ 2

Вы можете просто добавить "jasmine": true в ваш .jshintrc файл.

Ответ 3

Я исправил это в Gruntfile.js, добавив jasmine: true к параметрам задачи jshint:

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

Как и OP, я также не использую файл .jshintrc.

Ответ 4

Я считаю, что другие ответы верны, но я никогда не видел такого исключения раньше, но теперь вижу это. Затем я заметил, что мои тесты не в IIFE. Поэтому я переместил их в IIFE таким образом, и я больше не получаю таких предупреждений JSHINT.

(function () {

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

})();