Как отстаивать события, выбрасываемые в произвольном порядке с помощью мокко? - PullRequest
0 голосов
/ 05 июня 2019

Представьте себе случай, когда у вас будет 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();
            }
        });

    });
});

Опять же, я думаю, что должен быть лучший способ сделать это. Есть идеи? Спасибо!

...