【问题标题】:server.close() doesn't work in a Vow teardownserver.close() 在 Vow 拆解中不起作用
【发布时间】:2015-10-13 00:09:05
【问题描述】:

我正在尝试为我的普通 Express 应用编写一些基于 Vows 的测试。

这里是测试源:

var vows = require('vows');
var assert = require('assert');
var startApp = require('./lib/start-app.js');

var suite = vows.describe('tournaments');

suite.addBatch({
    "When we setup the app": {
        topic: function() {
            return startApp();
        },
        teardown: function(topic) {
            if (topic && topic.close) {
                topic.close();
            }
        },
        "it works": function(topic) {
            assert.isObject(topic);
        }
    }
});

suite.run();

这里是start-app.js

var app = require('../../app.js');

function start() {
    var server = app.listen(56971, 'localhost');
    return server;
}

module.exports = start;

app.js 导出使用express() 创建的常规 Express.js 应用。

问题是每当我运行测试时,topic.close() 在拆卸功能中不起作用,并且测试成功后永远挂起。我尝试在网上搜索并添加大量console.logs,但均无济于事。

我使用的是 Windows x64 版本的 Node.js 4.2.0,我使用的是 assert@1.3.0vows@0.8.1

知道如何让我的测试停止挂起吗?

【问题讨论】:

  • 同样的问题,在 Travis 上构建的测试将永远运行。你找到解决办法了吗?
  • @FernandoPiancastelli 我从来没有找到合适的解决方案,但作为一个肮脏的黑客,在topic 对象上调用.unref() 来“修复”这个问题。我怀疑某处存在错误,可能在 Node 核心中......

标签: node.js vows


【解决方案1】:

这是我为解决我参与的项目中的问题所做的:最后一批只是为了关闭服务器。

suite.addBatch({
  'terminate server': {
    topic: function() {
      server.close(this.callback); // this is a regular node require(`http`) server, reused in several batches
    },
    'should be listening': function() {
      /* This test is necessary to ensure the topic execution.
       * A topic without tests will be not executed */
      assert.isTrue(true);
    }
  }
}).export(module);

在添加此测试之前,套件永远不会结束执行。你可以在https://travis-ci.org/fmalk/node-static/builds/90381188查看结果

【讨论】:

  • 很好,但它并没有解决我的问题,因为服务器被用作主题。所以在批次之外没有对它的引用。
  • 这似乎与一个开放的错误link 有关,如果您的topic() 不调用this.callback,则不会调用拆卸。巧合的是,我的代码调用了它。如果我正确地记得节点 VM,如果您在另一批次中创建另一个主题,该主题再次返回 starApp() 并立即关闭它,它可能会起作用,因为它将您的 require('./lib/start-app.js') 视为单例,因此关闭它是唯一的侦听器.
猜你喜欢
  • 2013-10-22
  • 2019-05-29
  • 1970-01-01
  • 1970-01-01
  • 2014-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
相关资源
最近更新 更多