シノンについて学びたいのですが、console.log
をスパイしたいと思っています。コードは簡単です:
function logToConsole() {
console.log('Hello World');
}
exports.logToConsole = logToConsole;
しかし、テストしたい場合、console.log
の呼び出しがテスト対象のシステム内に登録されていないため、機能しません。
var chai = require('chai'),
expect = chai.expect,
sinonChai = require('sinon-chai'),
sinon = require('sinon'),
sut = require('../src/logToConsole');
chai.use(sinonChai);
describe('logToConsole', function() {
it('should spy on console.log', function() {
sinon.spy(console, 'log');
sut.logToConsole();
expect(console.log).to.have.been.called;
});
});
ただし、テスト自体の中でconsole.log
を実行すると、キャプチャされてパスします。
it('should spy on console.log', function() {
sinon.spy(console, 'log');
sut.logToConsole();
console.log('Test');
expect(console.log).to.have.been.called;
});
興味深いことに、内部関数呼び出しをスパイすることはまったくできないようです。これはスパイライブラリの目的ではありませんか?
例えば.
function a() {};
function b() {
a();
}
実際にsinon-chai
を使用していないようです。投稿したコードに次の行がありません:
chai.use(sinonChai);
[〜#〜] edit [〜#〜]:これは私がテストしたコードです:
// test.js
var chai = require('chai'),
expect = chai.expect,
sinonChai = require('sinon-chai'),
sinon = require('sinon'),
sut = require('./log');
chai.use(sinonChai);
describe('logging', function() {
beforeEach(function() {
sinon.spy(console, 'log');
});
afterEach(function() {
console.log.restore();
});
describe('logToConsole', function() {
it('should log to console', function() {
sut.logToConsole();
expect(console.log).to.be.called;
});
});
describe('logToConsole2', function() {
it('should not log to console', function() {
sut.logToConsole2();
expect(console.log).to.not.be.called;
});
});
});
// log.js
module.exports.logToConsole = function() {
console.log('Hello World');
};
module.exports.logToConsole2 = function() {
};