Как написать модульный тест для функции с Promise - PullRequest
0 голосов
/ 15 мая 2019

Я начинающий с 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();
        }
    });

}

Ответы [ 2 ]

1 голос
/ 15 мая 2019

В 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
    });
  });
});

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

0 голосов
/ 15 мая 2019

Вот код:

`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'));
    });
  });
});`

с другой стороны, у меня есть представление о том, что я буду тестировать в первую очередь. Я чувствую себя безнадежно потерянным. Я хочу вернуться в привет мир = (

...