如何在async.waterfall阵列node.js中为功能编写单元测试



我正在使用 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如果导出,我不允许我访问该功能。并且它也需要reqres也需要uploadHandler

如何编写waterfall中功能的单元测试。

您可以在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对象。

最新更新