假设我有这个功能我想测试:
var test = function () {
console.log('words!');
};
我会写这样的东西
define('test()', function () {
it('prints "words!" to the screen', function() {
test();
expect(<browser logs>).toContain('words!'); // TODO
}
}
但我不知道如何查看控制台日志或者这是否可能。我最好在任何浏览器中执行此操作,或者至少在 PhantomJS 中。
您可以在console.log 函数上创建spy。代码可能看起来像...
describe("log reporting", function () {
beforeEach(function(){
spyOn(window.console, 'log');
});
it('should print log message to console', function(){
test();
expect(window.console.log).toHaveBeenCalled();
})
});
通过这个例子,你会知道你的 console.log 函数被调用了。这正是您需要了解的。您不想将记录的消息与预期值进行比较,只是因为您不会对代码进行单元测试,而是对 window.console.log 函数本身进行单元测试,而该函数不是您编写的;)您可以调用“.and.callFake(function (){做一点事});”。在这种情况下,您将执行一些操作而不是实际的 console.log 调用,例如检查您的值。
您可以使用 calls 跟踪器并检查其提供的参数。
示例:
var test = function () {
console.log('Hello world');
};
it('prints "Hello words" to the screen', function() {
const logSpy = spyOn(console, 'log').and.callThrough();
test();
expect(logSpy.calls.count()).toBe(1) // check how many time it called
expect(logSpy.calls.first().args.length).toBe(2) // check how many words
expect(logSpy.calls.first().args[0]).toBe('Hello') // first args = first word
expect(logSpy.calls.first().args[1]).toBe('world') // and so on....
}
希望有帮助,