Javascript 如何为有承诺的函数编写单元测试

Javascript 如何为有承诺的函数编写单元测试,javascript,node.js,mocha.js,chai,Javascript,Node.js,Mocha.js,Chai,我是Node.JS和Mocha的初学者,负责为一个小组项目编写单元测试。我的问题是,我甚至不知道从哪里开始,因为返回值是一个承诺。 通过阅读大量的指南,我学会了如何检查常见函数的返回值,但这对实际示例没有帮助。 如果有经验丰富的开发人员可以帮助我提供一个特定于我列出的函数的指南和代码示例,我可以对其进行破解和理解,并将其应用于其他函数。 下面是一个从CSV文件获取用户统计信息的代码示例 function getStatistics() { return new Promise((reso

我是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();
        }
    });

}

在mocha中,您可以从测试函数返回承诺,以指示测试(
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
    });
  });
});
以下是代码:

`describe('Statistic', function(){
  it('should transform data into strings', function () {
    return statGet().then(readStatistics => {
      let maybe = statGet();
      var csv = maybe.csv;

      let dat = function (data) {
        data.avgDuration = "1,2";
        data.avgPassed = "2,3";
        data.avgReachedPoints ="3,4";
        data.minReachedPoints = "4";
        data.maxReachedPoints = "5";
        return data;
      }
      assert.typeOf(csv.transform(dat, 'string'));
    });
  });
});`
另一方面,我对我首先应该测试的东西有一点想法。
我感到绝望地迷失了方向。我想回到hello world=(

如果我尝试文章提供的代码,可能会出现重复,我会收到一条错误消息:TypeError:无法读取未定义的属性'resolve',它并没有真正的帮助。这非常有用,谢谢!我想检查转换是否正确工作,但我得到一个错误1)统计应将数据转换为字符串:TypeError:无法在进程的statGet.then.readStatistics(test.js:42:25)处读取未定义的属性“transform”。\u tickCallback(internal/process/next\u tick.js:68:7)