我有javascript代码,如果它在浏览器中运行,它会引发警报,但我不想在运行单元测试时发出警报。
我试图通过一条线来解决这个问题
if( allowAlerts === false ){
alert = console.log;
}
但是当我然后跑
alert("This bad thing happened");
我回来了
TypeError: Illegal invocation
直接重新分配警报是一个笨拙的解决方案,我可以通过其他方式轻松解决问题,但我以前从未遇到过非法调用错误,并希望有人可以解释它的含义。
console.log
函数需要其调用上下文作为控制台。
用
alert = console.log.bind(console);
或者如果你想与旧的IE兼容:
alert = function(){ console.log.apply(console, arguments) };