Экспорт чая не обнаружен в тесте Mocha

Я создал простой тест Mocha. Он отлично работает, когда используется модуль Node "assert". Я запускаю его из командной строки (Mocha установлен как модуль глобального узла):

$ mocha myTest.js

․

1 test complete (6 ms)

Скрипт выглядит так:

var assert = require("assert")
describe('Array', function(){
    describe('#indexOf()', function(){
        it('should return -1 when the value is not present', function(){
            assert.equal(-1, [1,2,3].indexOf(5));
            assert.equal(-1, [1,2,3].indexOf(0));
        })
    })
})

Ну, я попытался добавить Chai вместо библиотеки assert. Я его сначала установил:

npm install chai

Итак, в моем проекте создана директория node_modules. Пока отлично. Затем я изменил сценарий, чтобы использовать Chai:

var chai = require("chai");

describe('Array', function(){
    describe('#indexOf()', function(){
        it('should return -1 when the value is not present', function(){
            [1,2,3].indexOf(5).should.equal(-1);
            expect([1,2,3].indexOf(5)).to.equal(-1);
            assert.equal([1,2,3].indexOf(5),-1);
        })
    })
});

Не работает, тест Mocha не проходит с TypeError:

TypeError: Cannot call method 'equal' of undefined

Я предполагаю, что Чай не определил должен, поэтому он не определен.

Как это возможно?

Как я могу запустить мои тесты с помощью Chai? Я попытался установить Chai глобально, но безрезультатно. Я также запустил сценарий с -r chai, но тоже безрезультатно.

Судя по всему, модуль Chai загружен, но не определяет переменные (свойства Object.prototype). Как я могу это исправить?


person Pavel S.    schedule 01.05.2013    source источник


Ответы (1)


var expect = require('chai').expect;

Это заставит ваши expect звонки работать. Однако у вас также есть вызов should, который полностью исходит из другой библиотеки, поэтому измените

[1,2,3].indexOf(5).should.equal(-1);

to

expect([1,2,3].indexOf(5)).to.equal(-1);
person Peter Lyons    schedule 01.05.2013
comment
да. Это дизайнерское решение, принятое сообществом CommonJS. Явно объявленные зависимости, даже если они подробны, предпочтительнее неявных зависимостей. - person Peter Lyons; 14.12.2015
comment
В моем случае я просто получаю сообщение о том, что «require» не определен. Я запускаю мокко через карму залпом - person RMorrisey; 17.05.2016
comment
Этот вопрос касается node.js. Если вы работаете в браузере, вам понадобится сборщик модулей, такой как browserify или webpack, если вы хотите использовать commonjs require. В противном случае просто следуйте инструкциям по загрузке его в глобальное пространство имен браузера и используйте его напрямую без необходимости. - person Peter Lyons; 23.05.2016