首页 > 解决方案 > 如何使用 Promise 为函数编写单元测试

问题描述

我是 Node.JS 和 Mocha 的完整初学者,我的任务是为一个小组项目编写单元测试。我的问题是我什至不知道从哪里开始,因为返回值是一个承诺。看了很多指南,我学会了如何检查常用函数的返回值,但它对我的真实示例没有帮助。如果任何有经验的开发人员可以帮助我提供特定于我列出的功能的指南和代码示例,我可以破解并理解它并应用于其他功能。这是一个从 CSV 文件中获取统计信息的代码示例

function getStatistics() {
    return new Promise((resolve, reject)=>{
        try {
            let readStatistics = [];
            const statisticsReadStream = fs.createReadStream(statisticsFileName);
            csv.fromStream(statisticsReadStream, {headers: true})
                .transform(function (data) {
                    data.avgDuration = parseFloat(data.avgDuration);
                    data.avgPassed = parseFloat(data.avgPassed);
                    data.avgReachedPoints = parseFloat(data.avgReachedPoints);
                    data.minReachedPoints = parseInt(data.minReachedPoints);
                    data.maxReachedPoints = parseInt(data.maxReachedPoints);
                    return data;
                })
                .on("data", function (data) {
                    readStatistics.push(data);
                })
                .on("end", function () {
                    resolve(readStatistics);
                    statisticsReadStream.close();
                });

        }catch(err){
            reject();
        }
    });

}

标签: javascriptnode.jsmocha.jschai

解决方案


在 mocha 中,您可以从 test 函数返回 promise 以指示 test ( it) 已完成。

describe('My Test', function () {
  it('should do something cool', function () {
    return getStatistics().then(readStatistics => {
      // Assert whatever you want here
    });
  });
});

从您的函数中抛出的任何错误getStatistics或任何断言错误都将导致测试失败。

如果您特别想查看是否有错误发生,您也可以reject()在测试中捕获错误 ()。

describe('My Test', function () {
  it('should do something cool', function () {
    return getStatistics().catch(error => {
      // Assert whatever you want here about the error
    });
  });
});

https://mochajs.org/#asynchronous-code


推荐阅读