Ho tentato la risposta di jjm e ho avuto problemi che sospetto fosse dovuto al mio comportamento asincrono dei miei programmi.
Ho trovato una soluzione tramite un cli su github che utilizza la libreria sinon.
un codice di esempio per prova:
/* jshint node:true */
module.exports = Test1;
function Test1(options) {
options = options || {};
}
Test1.prototype.executeSync = function() {
console.log("ABC");
console.log("123");
console.log("CBA");
console.log("321");
};
Test1.prototype.executeASync = function(time, callback) {
setTimeout(function() {
console.log("ABC");
console.log("123");
console.log("CBA");
console.log("321");
callback();
}, time);
};
E la moka prove:
/* jshint node:true */
/* global describe:true, it:true, beforeEach:true, afterEach:true, expect:true */
var assert = require('chai').assert;
var expect = require('chai').expect;
var sinon = require("sinon");
var Test1 = require("../test");
var test1 = null;
describe("test1", function() {
beforeEach(function() {
sinon.stub(console, "log").returns(void 0);
sinon.stub(console, "error").returns(void 0);
test1 = new Test1();
});
afterEach(function() {
console.log.restore();
console.error.restore();
});
describe("executeSync", function() {
it("should output correctly", function() {
test1.executeSync();
assert.isTrue(console.log.called, "log should have been called.");
assert.equal(console.log.callCount, 4);
assert.isFalse(console.log.calledOnce);
expect(console.log.getCall(0).args[0]).to.equal("ABC");
expect(console.log.getCall(1).args[0]).to.equal("123");
expect(console.log.args[2][0]).to.equal("CBA");
expect(console.log.args[3][0]).to.equal("321");
});
});
describe("executeASync", function() {
it("should output correctly", function(done) {
test1.executeASync(100, function() {
assert.isTrue(console.log.called, "log should have been called.");
assert.equal(console.log.callCount, 4);
assert.isFalse(console.log.calledOnce);
expect(console.log.getCall(0).args[0]).to.equal("ABC");
expect(console.log.getCall(1).args[0]).to.equal("123");
expect(console.log.args[2][0]).to.equal("CBA");
expect(console.log.args[3][0]).to.equal("321");
done();
});
});
});
});
sto fornendo quanto sopra come dimostra lavorare con le chiamate asincrone, si occupa sia della console e l'errore uscita e il metodo di ispezione è più utile.
Devo notare che ho fornito due metodi per ottenere ciò che è stato passato alla console, console.log.getCall(0).args[0]
e console.log.args[0][0]
. Il primo parametro è la riga scritta sulla console. Sentiti libero di usare ciò che pensi sia appropriato.
Questa sembra la risposta migliore se non altro perché sfrutta il comune schema di Sinone e quindi è probabilmente più immediatamente comprensibile che cercare di acquisire process.stdout o qualsiasi altra cosa. Potrei essere solo me, però ... – aendrew
test-console è una libreria leggera che fa ciò di cui stai parlando @endend. Vedi la mia risposta elencata qui – ianstarz