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

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

  • Тест завершится с описанной ошибкой.

Может ли кто-нибудь помочь выяснить, что не так?

4b9b3361

Ответ 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>

Работал для меня.