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.
Ответы
Ответ 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);
});
});
})();