我用 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;
我不确定这种变化是否正确?有谁知道如何解决这个问题?