Представьте себе случай, когда у вас будет EventEmitter
, который генерирует несколько событий в произвольном порядке (т.е. заранее неизвестно, в каком порядке).
Если вы хотите заявить, что все эти события сработали, что было бы наилучшим способом сделать это с помощью мокко?
Похоже, что если у вас есть несколько it()
операторов, они выполняются по порядку, что означает, что если порядок событий неправильный, они не фиксируются.
Одним из способов преодоления этой проблемы является отслеживание списка событий и проверка того, что каждое из них сработало внутри одного оператора it()
. Это, однако, кажется мне уродливым решением. Я бы подумал, что у Мокко что-то есть в этой ситуации.
В следующем фрагменте кода показан пример, событие test1 запускается первым, но не захватывается, поскольку первый оператор it()
прослушивает событие test2 .
const EventEmitter = require('events');
const myEmitter = new EventEmitter();
setTimeout(() => { myEmitter.emit('test1') }, 1000);
setTimeout(() => { myEmitter.emit('test2') }, 2500);
describe('timeout', function() {
it('test 1 should work', function(done) {
this.timeout(4000);
myEmitter.on('test2', done);
});
it('test 2 should work', function(done) {
this.timeout(4000);
myEmitter.on('test1', done);
});
});
Сказал, что обходной путь будет что-то вроде
describe('timeout', function() {
it('test 1 & 2 should work', function(done) {
this.timeout(4000);
var test1_done = false;
var test2_done = false;
myEmitter.on('test1', () => {
test1_done = true;
console.log('1');
if (test1_done && test2_done) {
done();
}
});
myEmitter.on('test2', () => {
test2_done = true;
console.log('2');
if (test1_done && test2_done) {
done();
}
});
});
});
Опять же, я думаю, что должен быть лучший способ сделать это. Есть идеи? Спасибо!