JJJ*_*JJJ 7 javascript tdd jquery error-logging
我正在尝试编写一个测试用例,用于将消息写入JavaScript控制台的调试方法console.log().测试必须检查消息是否已成功写入控制台.我正在使用jQuery.
有没有办法附加一个钩子console.log()或以其他方式检查是否已将消息写入控制台,或者有关如何编写测试用例的任何其他建议?
小智 18
您可以console.log使用自己的函数替换,该函数确定是否已正确调用它.以下是如何确认函数记录特定消息的示例:
function saySomething() {
console.log("Hello World");
}
Run Code Online (Sandbox Code Playgroud)
jest.spyOn(console, 'log');
test("saySomething says hello", () => {
expect(console.log.mock.calls.length).toBe(0);
saySomething();
expect(console.log.mock.calls.length).toBe(1);
expect(console.log.mock.calls[0][0]).toBe("Hello World");
});
afterEach(() => {
jest.clearAllMocks();
});
Run Code Online (Sandbox Code Playgroud)
function saySomething() {
console.log("Hello World");
}
Run Code Online (Sandbox Code Playgroud)
function testSomething() {
// Replace console.log with stub implementation.
const originalLog = console.log;
const calls = [];
console.log = (...args) => {
calls.push(args);
originalLog(...args);
};
try {
console.assert(calls.length == 0);
saySomething();
console.assert(calls.length == 1);
console.assert(calls[0][0] == "Hello World");
} catch (error) {
console.error(error);
} finally {
// Restore original implementation after testing.
console.log = originalLog;
}
}
Run Code Online (Sandbox Code Playgroud)
function saySomething() {
console.log("Hello World");
}
Run Code Online (Sandbox Code Playgroud)
所以不错的解决方案,但如果你正在寻找一个高功率记录器尝试保罗爱尔兰的日志()
如果它的功率太大,你可以用这样的东西.
var console = window.console,
_log = console ? console.log : function(){};
_log.history = [];
console.log = function( ){
_log.history.push.apply( _log.history, arguments );
_log.apply( console, arguments );
}
Run Code Online (Sandbox Code Playgroud)
用法
console.log('I','have','an','important','message');
//Use native one instead
_log.call( console, _log.history );
Run Code Online (Sandbox Code Playgroud)
如果你正在使用Jasmine,它很简单:
it('is my test', function () {
spyOn(console, 'log');
// do your stuff that should log something
expect(console.log).toHaveBeenCalledWith('something');
});
Run Code Online (Sandbox Code Playgroud)
前往Jasmine docs获取更多信息.
只需将您自己的函数附加到console.log即可.在您的页面上,在所有加载后,
在开始测试之前 -
var originalLog = console.log;
console.log = function(msg){
alert('my .log hook received message - '+msg);
//add your logic here
}
Run Code Online (Sandbox Code Playgroud)
运行测试后,如有必要 -
console.log = originalLog
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14832 次 |
| 最近记录: |