无法对使用$ window的Angular指令进行单元测试

dan*_*man 7 javascript sinon angularjs karma-runner

我已经为各种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);
Run Code Online (Sandbox Code Playgroud)

并编译指令:

$compile(testElement)($scope);
Run Code Online (Sandbox Code Playgroud)

我正在$provide尝试模拟$window对象:

module('app', function ($provide) {
    $provide.value('$window', { id: 'test' });
});
Run Code Online (Sandbox Code Playgroud)

但是一旦我尝试$window在被测试的文件中使用,就会抛出上面显示的错误.

正如我所说,我对其他指令,服务和控制器进行了一系列其他单元测试按预期工作,因此所有内容都可以正确设置.这只是这个特殊的测试.

有任何想法吗?

mic*_*ico 2

我不确定这是否是同一个错误,但就在几天前,sinon github 上解决了类似问题的修复:

https://github.com/sinonjs/sinon/pull/833

修复包含行:

var callStr = this.proxy ? this.proxy.toString() + "(" : "";
Run Code Online (Sandbox Code Playgroud)

其中空检查是一回事,还有其他几行。

此修复位于lib/sinon/call.jscommit 中的文件中7a18eb5

我不确定这是否相同,因为文件不同,线路也不同。尽管如此,这还是很有趣,我会尝试最新的 sinon 版本,看看这个问题是否得到解决。但是,如果两个文件中的编码器相同,则 sinon 的多个部分可能会出现类似的错误。