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);
});
我已经在 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);
});