У меня есть глобальный объект, который имеет возможность назначать функции для событий, например:
obj.on('event', () => {});
После вызова точного публичного API эти события также запускаются.
Теперь мне нужно написать асинхронные тесты с mocha.js / chai.js и запустить его в среде node.js.
Я застрял в ситуации, когда нужно проверить сразу две подписки на события.
Весь код написан на TypeScript, а затем преобразован в JavaScript.
Код в глобальном объекте:
public someEvent(val1: string, val2: Object) {
// some stuff here...
this.emit('event_one', val1);
this.emit('event_two', val1, val2);
}
Код в тестовом файле (моя последняя реализация):
// prerequisites are here...
describe('test some public API', () => {
it('should receive a string and an object', (done) => {
// counting number of succesfull calls
let steps = 0;
// function which will finish the test
const finish = () => {
if ((++steps) === 2) {
done();
}
};
// mock values
const testObj = {
val: 'test value'
};
const testStr = 'test string';
// add test handlers
obj.on('event_one', (key) => {
assert.equal(typeof key, 'string');
finish();
});
obj.on('event_two', (key, event) => {
assert.equal(typeof key, 'string');
expect(event).to.be.an.instanceOf(Object);
finish();
});
// fire the event
obj.someEvent(testStr, testObj);
});
});
Итак, мой вопрос - есть ли встроенная функциональность, чтобы этот тест выглядел более элегантно?
Другой вопрос: как предоставить некоторую значимую информацию об ошибке вместо строки ошибки по умолчанию?
Ошибка: превышено время ожидания 2000 мс. Для асинхронных тестов и хуков убедитесь, что вызывается «done ()»; если вы возвращаете обещание, убедитесь, что оно разрешено.