无法对使用 $window 的 Angular 指令进行单元测试
Unable to unit test an Angular directive that uses $window
我有一堆针对各种 Angular (1.4.7) 指令的工作单元测试,我正在使用 Karma、Jasmine 和 Sinon 进行测试。
我正在尝试为新指令添加单元测试,这是我目前唯一使用 $window
的指令,但我在控制台输出中看到一个神秘错误:
TypeError: 'undefined' is not an object (evaluating 'this.proxy.toString')
此错误来自第 2372 行的 sinon.js。
我正在执行指令单元测试中的所有 'normal' 事情,例如创建一个将指令作为属性的假元素:
testElement = document.createElement('div');
testElement.setAttribute('data-my-directive');
document.body.appendChild(testElement);
并编译指令:
$compile(testElement)($scope);
我正在使用 $provide
来尝试模拟 $window
对象:
module('app', function ($provide) {
$provide.value('$window', { id: 'test' });
});
但是当我尝试在正在测试的文件中使用 $window
时,就会抛出上面显示的错误。
正如我所说,我对其他指令、服务和控制器进行了一系列其他单元测试,它们按预期工作,因此一切似乎都已正确设置。就是这个特殊的测试。
有什么想法吗?
我不确定这是否是同一个错误,但就在几天前,sinon github:
上解决了类似问题
https://github.com/sinonjs/sinon/pull/833
修复包含行:
var callStr = this.proxy ? this.proxy.toString() + "(" : "";
空检查是一回事,还有其他几行。
此修复在文件 lib/sinon/call.js
中提交 7a18eb5
。
我不确定这是否相同,因为文件不同,线路也不同。尽管如此,这仍然很有趣,我会尝试最新的 sinon 版本,看看是否能解决这个问题。不过,如果两个文件中的编码器相同,sinon 的几个部分可能会出现类似的错误。
我有一堆针对各种 Angular (1.4.7) 指令的工作单元测试,我正在使用 Karma、Jasmine 和 Sinon 进行测试。
我正在尝试为新指令添加单元测试,这是我目前唯一使用 $window
的指令,但我在控制台输出中看到一个神秘错误:
TypeError: 'undefined' is not an object (evaluating 'this.proxy.toString')
此错误来自第 2372 行的 sinon.js。
我正在执行指令单元测试中的所有 'normal' 事情,例如创建一个将指令作为属性的假元素:
testElement = document.createElement('div');
testElement.setAttribute('data-my-directive');
document.body.appendChild(testElement);
并编译指令:
$compile(testElement)($scope);
我正在使用 $provide
来尝试模拟 $window
对象:
module('app', function ($provide) {
$provide.value('$window', { id: 'test' });
});
但是当我尝试在正在测试的文件中使用 $window
时,就会抛出上面显示的错误。
正如我所说,我对其他指令、服务和控制器进行了一系列其他单元测试,它们按预期工作,因此一切似乎都已正确设置。就是这个特殊的测试。
有什么想法吗?
我不确定这是否是同一个错误,但就在几天前,sinon github:
上解决了类似问题https://github.com/sinonjs/sinon/pull/833
修复包含行:
var callStr = this.proxy ? this.proxy.toString() + "(" : "";
空检查是一回事,还有其他几行。
此修复在文件 lib/sinon/call.js
中提交 7a18eb5
。
我不确定这是否相同,因为文件不同,线路也不同。尽管如此,这仍然很有趣,我会尝试最新的 sinon 版本,看看是否能解决这个问题。不过,如果两个文件中的编码器相同,sinon 的几个部分可能会出现类似的错误。