Тест Mocha Typescript не печатает Console.log - PullRequest
0 голосов
/ 10 октября 2018

Я настроил свой тест, используя mocha, chai, typcript, в узле:

import chai = require('chai');
import chaiAsPromised = require('chai-as-promised');
import ReadLine = require('readline');
import FS = require('fs');

before((done) => {
    chai.should();
    chai.use(chaiAsPromised);
    done();
});


describe("Test", function() {
    this.timeout(20000);
    let testFile: string [] = [];

    before((done) => {
        let lineReader = ReadLine.createInterface({
            input: FS.createReadStream("MyFile.txt")
        });

        lineReader.on('line', function (line) {
            testFile.push(line);
        });
        done();
    });
    it("test", () => {
        for(let i=0;i<testFile.length;i++){
            let curLine = testFile[i];
            console.log(curLine);
        }
    }).timeout(30000);
});

Затем я запускаю свой тест следующим образом:

C:\Repository\Folder>npm test

> Test@0.0.1 test C:\Repository\Folder
> mocha -r ts-node/register -R spec test/**/*.ts



  Test
    √ test


  1 passing (16ms)

Так что, похоже, он прошел, но это не вывод на консоль, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Проблема заключается в следующем фрагменте кода:

lineReader.on('line', function (line) {
    testFile.push(line);
});
done();

Ваш считыватель ReadLine работает асинхронно.Вы присоединяете прослушиватель, и перед прочтением любой строки done() уже вызывается, поскольку это следующая запись в цикле событий.

Чтобы исправить это, подождите, пока читатель закроется:

import chai = require('chai');
import chaiAsPromised = require('chai-as-promised');
import ReadLine = require('readline');
import FS = require('fs');

before((done) => {
    chai.should();
    chai.use(chaiAsPromised);
    done();
});


describe("Test", function() {
    this.timeout(20000);
    let testFile: string [] = [];

    before((done) => {
        let lineReader = ReadLine.createInterface({
            input: FS.createReadStream("MyFile.txt")
        });

        lineReader.on('line', function (line) {
            testFile.push(line);
        });
        linereader.on('close', () => done()); // <===== 
    });
    it("test", () => {
        for(let i=0;i<testFile.length;i++){
            let curLine = testFile[i];
            console.log(curLine);
        }
    }).timeout(30000);
});
0 голосов
/ 10 октября 2018

Вам нужно использовать done () после цикла for:

it("test", (done) => {
    for(let i=0;i<testFile.length;i++){
        let curLine = testFile[i];
        console.log(curLine);
    }

  done();
}).timeout(30000);
...