TypeError: 'undefined' не является функцией (оценка "sinon.spy()" )
Я пытаюсь использовать sinon.js при тестировании базового приложения. Но, к сожалению, я не могу использовать метод spy из-за ошибки:
TypeError: 'undefined' is not a function (evaluating 'sinon.spy()')
Ниже приведены шаги для воспроизведения ошибки:
- Создайте пустой проект с генератор магистрального генератора
- Установить синус:
cd test && bower install sinon
- Включить в test/index.html
<script src="bower_components/sinon/lib/sinon.js"></script>
-
Создайте шпион в test/spec/test.js:
describe('Give it some context', function () {
describe('maybe a bit more context here', function () {
it('should run here few assertions', function () {
var spy = sinon.spy();
spy.should.be.ok;
});
});
});
-
Запустите тест с помощью grunt: grunt test
-
Тест завершится с описанной ошибкой.
Может ли кто-нибудь помочь выяснить, что не так?
Ответы
Ответ 1
Оказалось, что такие функции, как шпионы, заглушки и т.д., должны добавляться вручную, включая скрипты из папки lib/sinon
. Этот факт упоминается в разделе "Установка". И из-за кода основного файла sinon.js только в среде Node.js это делается автоматически.
Ответ 2
Я просто оставлю здесь список файлов, которые sinon
удобно забывает загружать, если он загружен как <script>
или с require.js
(как модуль AMD) - в основном что-либо еще, чем в node.js
:
"sinon/lib/sinon.js",
"sinon/lib/sinon/spy.js",
"sinon/lib/sinon/call.js",
"sinon/lib/sinon/behavior.js",
"sinon/lib/sinon/stub.js",
"sinon/lib/sinon/mock.js",
"sinon/lib/sinon/collection.js",
"sinon/lib/sinon/assert.js",
"sinon/lib/sinon/sandbox.js",
"sinon/lib/sinon/test.js",
"sinon/lib/sinon/test_case.js",
"sinon/lib/sinon/match.js"
Не стесняйтесь пропустить любую из них, но ожидайте, что синон окажется не в курсе.
Ответ 3
Я столкнулся с той же проблемой с sinon 1.17.2 и Chrome 47.0. Попробовав вышеуказанные решения и варианты, я закончил использование ядерной опции и переключился на Jasmine.
Для моего тестового набора потребовалось около 15 минут некоторой глобальной находки и замены, чтобы преобразовать мои chai "ожидается" в Jasmine и некоторые различия вокруг мокки перед синтаксисом; Жасмин четко обозначил неожиданный синтаксис. объекты шпионов Жасмина были прекрасной заменой синону.
Ответ 4
В отличие от других ответов, я не установил симон вручную, включив каждый отдельный исходный файл. Вместо этого я последовал совету Как установить Sinon.JS в браузере с Bower.
bower install http://sinonjs.org/releases/sinon-1.17.6.js
то
bower list -p
'sinon-1.17.6': 'bower_components/sinon-1.17.6/index.js'
И
<script src="bower_components/sinon-1.17.6/index.js"></script>
Работал для меня.