Jasmine - TypeError:' undefined'不是一个对象(评估' win.focus')

时间:2015-10-15 07:56:40

标签: javascript karma-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上模拟焦点功能吗?

3 个答案:

答案 0 :(得分:1)

_。noop没有返回值,因此win实际上是未定义的。

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您的模拟使用noop用于open方法,该方法会将undefined返回到win变量中。使用返回另一个模拟的函数,例如为:

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

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