Mocha Typescript 测试不打印 Console.log

Mocha Typescript test doesn't print Console.log

我已经在 Node 中使用 mocha、chai、typescript 设置了我的测试:

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)

所以它似乎确实通过了,但它没有打印到控制台,我做错了什么?

你需要在for循环后使用done():

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

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

问题出在这段代码:

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

您的 ReadLine reader 异步工作。您附加一个侦听器,并且在读取任何行之前,done() 已经被调用,因为它是事件循环中的下一个条目。

要修复它,请等待 reader 关闭:

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