2016-02-16 59 views
7

我有一大堆工作单元测试各种角度(1.4.7)的指令,而我使用的是因果报应,茉莉花和兴农用于测试的角度指令。

我想添加一个单元测试了新的指令,这是唯一的指令,我现在有一个使用$window但我看到控制台输出一个神秘的错误:

TypeError: 'undefined' is not an object (evaluating '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正在测试中,错误如上所示被抛出。

正如我说的,我有一堆的其他单元测试其他指令,服务和控制器如预期工作,所以一切似乎正确地安装。这只是这个特殊的测试。

任何想法?

回答

2

我不知道这是否是同样的错误,但只是前两天的修复,以类似的问题已得到有效解决对兴农github上:

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

修复包含线路:

var callStr = this.proxy ? this.proxy.toString() + "(" : ""; 

其中空校验是一回事,而其他几行。

此修复程序是在提交7a18eb5文件lib/sinon/call.js

我不知道这是否是一样的,因为文件是不同的,所以是线,太。不过,这很有趣,我会尝试最新的sinon版本,看看这是否得到解决。但是,如果编码器在两个文件中都是相同的,那么类似的错误可能出现在Sinon的几个部分。

+0

完美的,我会尽量在周一的新版本。 – danwellman

+0

抱歉,延迟。我在这方面做了一些更多的工作,它*不是Sinon的版本,虽然这是一个很好的电话。我认为问题在于,在被测文件中使用'$ window'的代码也在'$ document.ready()'处理程序中,之前我没有正确存根。我将这个标记为公认的答案,因为它是唯一的答案,也因为它让我思考了被测代码的所有方面,而不仅仅是使用'$ window'的部分,这是非常宝贵的。谢谢! – danwellman