我用AngularJs建立了一个项目,并用Karma和jasmine进行了单元测试。
我在Angular项目中的一个控制器需要引用socket.io来与服务器一起传输数据。我为这个控制器编写了单元测试用例。 Ana将'socket.io.js'文件添加到'karma.conf.js'中,当我用karma测试它时,会抛出一个错误:
Uncaught TypeError: Cannot read property 'transport' of undefined
,此错误抛出karma-jasmine节点包中的adapter.js中的下面语句:
var getCurrentTransport = function() {
// probably running in debug.html (there's no socket.io)
if (!window.parent.io) {
return null;
}
var location = window.parent.location;
return window.parent.io.sockets[location.protocol + '//' + location.host].transport.name;
};
我不会放弃了解这段代码的含义,我发现window.parent.io.sockets
是一个空对象,所以添加了另一个语句来返回null,这样它就不会抛出错误。
var location = window.parent.location;
if(!window.parent.io.sockets[location.protocol + '//' + location.host]){
return null;
}
return window.parent.io.sockets[location.protocol + '//' + location.host].transport.name;
我不确定这种变化是否正确?有谁知道如何解决这个问题?
答案 0 :(得分:0)
@Zacho在 adapter.js 中return...
之前添加这些语句。
if(!window.parent.io.sockets[location.protocol + '//' + location.host]){
return null;
}
这些只是破解方法,虽然我不认为这是一个很好的解决方案,但我没有找到为什么会出现这个问题。