我已经为各种Angular(1.4.7)指令进行了大量的工作单元测试,我正在使用Karma,Jasmine和Sinon进行测试。
我正在尝试为新指令添加单元测试,这是我目前唯一使用$window
的指令,但我在控制台输出中看到了一个神秘的错误:
TypeError:'undefined'不是对象(评估'this.proxy.toString')
此错误来自sinon.js第2372行。
我在指令单元测试中做了所有'正常'的事情,比如创建一个伪指令作为属性的伪元素:
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
,就会抛出上面显示的错误。
正如我所说,我对其他指令,服务和控制器进行了一系列其他单元测试按预期工作,所以一切似乎都正确设置。这只是这个特殊的测试。
有什么想法吗?
答案 0 :(得分:2)
我不确定这是否是同一个错误,但就在几天前,类似问题的解决方案在sinon github上得到了解决:
https://github.com/sinonjs/sinon/pull/833
修复包含行:
var callStr = this.proxy ? this.proxy.toString() + "(" : "";
其中空检查是一件事和其他几行。
此修复程序位于提交lib/sinon/call.js
中的文件7a18eb5
。
我不确定这是否相同,因为文件不同,所以也是行。不过,这是非常有趣的,我会尝试最新的sinon版本,看看这是否得到修复。但是,如果编码器在两个文件中都是相同的,那么类似的错误可能在sinon的几个部分中。