Модульное тестирование с использованием асинхронного кода Mocha+PhantomJS
Я новичок в модульном тестировании, поэтому, пожалуйста, простите меня, если мой вопрос может быть глупым. Я написал модульный тест, используя Mocha с PhantomJS и Chai в качестве библиотеки утверждений. Код, который я хочу проверить, является следующей функцией:
function speakingNotification(audioStream){
var options = {};
var speechEvents = hark(audioStream, options);
speechEvents.on('speaking', function() {
return 'speaking';
});
speechEvents.on('stopped_speaking', function() {
return 'stopped_speaking';
});
}
Как вы можете видеть, он принимает параметр audioStream в качестве входных данных, а затем использует библиотеку hark.js https://github.com/otalk/hark для обнаружения речевых событий. Функция должна вернуться, если пользователь говорит или нет.
Поэтому я написал следующий тестовый модуль:
describe('Testing speaking notification', function () {
describe('Sender', function(){
var audio = document.createElement('audio');
audio.src = 'data:audio/mp3;base64,//OkVA...'; //audio file with sound
var noAudio = document.createElement('audio');
noAudio.src = 'data:audio/mp3;base64,...'; //audio file with no sound
it('should have a function named "speakingNotification"', function() {
expect(speakingNotification).to.be.a('function');
});
it('speaking event', function () {
var a = speakingNotification(audio);
this.timeout( 10000 );
expect(a).to.equal('speaking');
});
it('stoppedSpeaking event', function () {
var a = speakingNotification(noAudio);
this.timeout( 10000 );
expect(a).to.equal('stopped_speaking');
});
});
});
Тест не пройден и показывает:
AssertionError: expected undefined to equal 'speaking'
AssertionError: expected undefined to equal 'stopped_speaking'
Я также попытался использовать метод done(), установленный по тайм-ауту, однако тест не пройден и показывает:
ReferenceError: Can't find variable: done
Я искал учебники, но я могу найти только простые примеры, которые не помогают. Как я могу написать правильный тест?