代码之家  ›  专栏  ›  技术社区  ›  Girdhar Sojitra

如何使用事件发射器接收同一类型的多个事件?

  •  1
  • Girdhar Sojitra  · 技术社区  · 8 年前

    我正在使用mocha框架编写测试用例。我必须编写一个测试用例,其中我希望接收多个相同类型的事件,并根据预期值检查所有事件值。我使用EventEmitter发送事件,但我不知道如何一次累积多个事件,然后在一个上下文中检查所有值。

    如何使用EventEmitter或任何其他方法聚合/累积事件?

    1 回复  |  直到 8 年前
        1
  •  1
  •   danroshko    8 年前

    您只需创建一个空数组来保存发出的值,每当发出一个新事件时,将其推到数组并检查其长度。当数组长度等于预期的事件数时,执行所需的所有检查。如果在多个测试中需要该功能,可以将其提取到单独的函数中。看看 collect 以下示例中的函数:

    // waits for specified number of events and then resolves with the results
    function collect(emitter, event, count) {
        const results = [];
    
        return new Promise((resolve, reject) => {
            emitter.on(event, value => {
                results.push(value);
                if (results.length === count) {
                     return resolve(results);
                }
            })
        })
    }
    
    describe('EventEmitter', function() {
        it('emits 3 ping events', function() {
            const emitter = new EventEmitter();
    
            setTimeout(() => {
                emitter.emit('ping', 'pong');
                emitter.emit('ping', 'pong');
                emitter.emit('ping', 'pong');
            }, 10)
    
            return collect(emitter, 'ping', 3).should.eventually.eql(['pong', 'pong', 'pong']);
        })
    })