16 javascript testing mocha.js sinon chai
我正在努力了解Sinon,并希望窥探console.log.代码很简单:
function logToConsole() {
console.log('Hello World');
}
exports.logToConsole = logToConsole;
Run Code Online (Sandbox Code Playgroud)
但是,如果我想测试它,它不起作用,因为调用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;
});
});
Run Code Online (Sandbox Code Playgroud)
但是,如果我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;
});
Run Code Online (Sandbox Code Playgroud)
有趣的是,它似乎根本无法监视内部函数调用.这不是间谍图书馆的目的吗?
例如
function a() {};
function b() {
a();
}
Run Code Online (Sandbox Code Playgroud)
rob*_*lep 20
看起来你实际上并没有使用sinon-chai,你发布的代码缺少这一行:
chai.use(sinonChai);
Run Code Online (Sandbox Code Playgroud)
编辑:这是我测试的代码:
// 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() {
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11683 次 |
| 最近记录: |