【问题标题】:Strange error when I use vows in node.js当我在 node.js 中使用 vows 时出现奇怪的错误
【发布时间】:2012-11-16 03:00:49
【问题描述】:

我正在尝试使用 vows 使用 BDD 启动我的 node.js 项目。 然后我得到了这个奇怪的错误。

我正在尝试用 vows 为 express 编写一个小型路由测试,这是我的原始代码,

node_server.prototype.mainpage = function(callback) {
  http.get({host:'localhost', port:this.port, path:'/', agent:false}, function(res){
  callback(res.statusCode);
  });
}

这就是我写誓言测试的方式

vows.describe('Request to the server').addBatch({
'Should get http 200': {
      topic: function () {
        app_server.mainpage(this.callback)
      },

      'we get 200': function (statusCode) {
        app_server.close_server();
        assert.equal(statusCode, 200);
      }
  },
}).run(); // Run it

即使 statusCode 是正确的,Vows 总是会报告意外错误,像这样

» An unexpected error was caught: 200

所以我像这样改变我的主页功能

node_server.prototype.mainpage = function(callback) {
  http.get({host:'localhost', port:this.port, path:'/', agent:false}, function(res){
      callback("error", res.statusCode); // Here I added a err message in front of the status code.
  });
}

我还将我的测试套件更改为

'we get 200': function (err, statusCode) {

然后这个测试成功了! 我只是想知道这种奇怪的情况怎么会发生。我已经阅读了誓言的文档,但我没有找到他们说我必须将 2 个参数放入 cb 而不是 1 的任何地方。

给我一​​些线索! 提前谢谢!

【问题讨论】:

    标签: node.js testing express bdd vows


    【解决方案1】:

    Vows 文档没有提及它,但它假设错误优先回调模式,该模式已被 Node.js 社区广泛采用。在这种模式下,回调的第一个参数总是一个错误。如果它为 null 或未定义,那么您就知道异步操作成功了。我建议您也将这种模式用于您自己的所有代码,即使该函数永远不会产生错误参数。

    如果您自己使用此模式,您可以更轻松地使用其他库,例如 async,这可以让复杂的应用程序变得更容易。

    【讨论】:

      猜你喜欢
      • 2022-09-27
      • 2020-08-30
      • 2013-05-05
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 2012-05-05
      • 2011-06-16
      • 1970-01-01
      相关资源
      最近更新 更多