javascript - 如何按时间顺序运行 Mocha 测试?

标签 javascript unit-testing node.js asynchronous mocha.js

我有一组基于全局事件发射器运行的模块。它们基于按时间顺序排列的事件链运行,如下所示:

  1. boot.ready
  2. 服务器创建(因为 boot.ready 事件)
  3. 服务器已配置(由于 server.created 事件)

因此,我需要创建一个按时间顺序执行测试的 server-test.js。

Mocha 可以做到这一点吗?像下面这样的东西?

var EventEmitter2      = require('eventemitter2').EventEmitter2,
    should             = require('should');

describe('server', function() {

    var mediator = new EventEmitter2({
            wildcard: false
        });

    require('../../src/routines/server/creator')(mediator);
    require('../../src/routines/server/configurer')(mediator);

    it('should be created after boot', function(done) {
        mediator.once('server.created', function(server) {
            server.should.exist;
            done();
        });

        it('should be configured after created', function(done) {
            mediator.once('server.configured', function() {
                done();
            });
        });

        mediator.emit('boot.ready');
    });
});

因为这个全局事件发射器的工作方式似乎有些困惑,这是 server/creator.js 模块:

module.exports = function(mediator) {

    var express = require('express');

    mediator.once('boot.ready', function() {

        var server = express.createServer();

        //event: server created
        mediator.emit('server.created', server);

    });
};

如您所见,服务器是在boot.ready 之后创建的。这将触发 server.created,之后配置器将运行,然后将触发 server.configured

这一系列事件需要通过 mocha 进行测试。

最佳答案

如果我正在测试一系列事件,那么快速的方法是嵌套 eventEmitter.once 调用,如下所示:

it('executes in the right sequence', function(done) {
  mediator.once('boot.ready', function() {
    mediator.once('server.created', function() {
      done()
    })
  })
})

编辑:正如所指出的,server.created 将在测试的 boot.ready 处理程序被触发之前被触发。这是一个解决方法:

it('executes in the right sequence', function(done) {
  var bootReadyFired = false
  mediator.once('boot.ready', function() {
    bootReadyFired = true
  })
  mediator.once('server.created', function() {
    assert.ok(bootReadyFired)
    done()
  })
})

希望这对您有所帮助。

关于javascript - 如何按时间顺序运行 Mocha 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10540254/

相关文章:

node.js - 无法使用 API 创建 Eventbrite 事件

node.js - 如何使用imagemin压缩图像和busboy

javascript - 防止双击创建帐户两次

python - 使用 Python 进行依赖测试

javascript - knex.js 迁移中的时间戳字段

javascript - Backbone.js 解析方法

java - Java Junit/Mockito 中的单元测试 void 方法

javascript - javascript 中的 location.href?

javascript - 刷新slidejs

javascript - 如何在 BrowserWindow (Electron) 中打开 Markdown 文件?