javascript - 如何为 Async.waterfall 数组 Node.js 中的函数编写单元测试

标签 javascript node.js unit-testing mocha.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 如果我导出它,则不允许我访问该函数。它还需要来自 uploadHandlerreqres

如何为 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 对象。

关于javascript - 如何为 Async.waterfall 数组 Node.js 中的函数编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47834848/

相关文章:

node.js - nunjucks:找不到模板

PHPUnit 检查方法返回类型

javascript - 使用 JavaScript 循环访问 APEX 应用程序项目

javascript - 我如何随机化在 JQuery 每个循环中选择的元素

mysql - 在方法外部获取变量执行查询MySQL?

java - Junit 4 看不到 bean

android - 就单元测试而言,Android 的 MVP 或 MVVM?

javascript - 刷卡轮播 : How to give different properties to the same carousel for different screen sizes

javascript - 如何将 Kotlin 编译成 TypeScript?

angularjs - Angular $http.post 返回空错误