【问题标题】:How to Write unit tests for functions within Async.waterfall array Node.js如何为 Async.waterfall 数组 Node.js 中的函数编写单元测试
【发布时间】:2017-12-15 14:57:38
【问题描述】:

我正在使用Mocha 编写测试用例,

这是我的代码结构 -

var async = require('async');

const uploadHandler = (req, res) => {
  async.waterfall([
    function testdata(callback){
      fetchdetails(callback, req, res);
    },

    function resignDocs(callback) {
      //do something
      console.log(req.body.name);
    }
  ]);
};

app.post('/uploadfile', uploadHandler);
exports.server = app.listen(config.port, () => {
  console.log('info', `Listening for incoming connections on port ${config.port}...`);
});

我正在尝试为函数 testdata 和函数 resignDocs 编写测试用例,

我使用 -

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

(app.js 是上面代码的文件名)

现在app.fetchdetails 不允许我在导出该函数时访问它。它还需要来自uploadHandlerreqres

如何为waterfall 中的函数编写单元测试。

【问题讨论】:

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


【解决方案1】:

您可以在uploadHandler 之前定义您的函数并在以后导出它们。通过这样做,您可以在测试中完全控制resignDocsuploadHandler 甚至uploadHandler

var async = require('async');

function testdata(callback) {
    fetchdetails(callback, req, res);
}

function resignDocs(callback) {
    //do something
    console.log(req.body.name);
}

const uploadHandler = (req, res) => {
    async.waterfall([
        testdata,
        resignDocs
    ]);
};

app.post('/uploadfile', uploadHandler);

exports.server = app.listen(config.port, () => {
    console.log('info', `Listening for incoming connections on port ${config.port}...`);
});

exports.testdata = testdata;
exports.resignDocs = resignDocs;
exports.uploadHandler = uploadHandler;

导出类似的函数后,您可以利用 sinon-express-mock 模拟 req 和 res 对象。

【讨论】:

  • 我也是这么想的,然后我意识到我在testdataresignDocs这两个函数中需要reqres对象,这仅在waterfall函数中可用。这就是我在如何模拟reqres 来测试testdata 函数时遇到的问题。
  • @Darpan 你可以使用类似npmjs.com/package/sinon-express-mock 的东西来模拟请求和响应。
猜你喜欢
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 2016-09-25
  • 2015-05-30
相关资源
最近更新 更多