Jasmine - TypeError: 'undefined' is not an object (evaluating 'win.focus')

Jasmine - TypeError: 'undefined' is not an object (evaluating 'win.focus')

我正在为这行代码创建一个 jasmine 测试:

var win = $window.open('url', '_blank', getBrowserSize());
win.focus();

我试图以此来嘲笑它

$window: {open: _.noop, focus: _.noop}

但是当我 运行 测试时它给了我这个错误

TypeError: 'undefined' is not an object (evaluating 'win.focus')

有人可以帮我如何模拟 $window 上的焦点功能吗?

_.noop 什么也不做,returns 什么也不做。因此,当您执行 var win = $window.open('url', '_blank', getBrowserSize()); 时,win 未定义。

您的模拟使用 noop 作为 open 方法,returns undefined 进入 win 变量。使用 returns 另一个模拟的函数,例如如:

$window: {
    open: jasmine.createSpy('$window.open'),
    focus: _.noop
}

$window.open.and.returnValue({
    // this is the second mock
    focus: jasmine.createSpy('focus')
});

_.noop 没有 return 值,所以 win 实际上是未定义的。

您可能想尝试这样的事情:

var $window = {open: function() { return this }, focus: _.noop}
var win = $window.open('url', '_blank', getBrowserSize());
win.focus();