2

我用 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;

我不确定这种变化是否正确?有谁知道如何解决这个问题?

4

1 回答 1

0

return...@Zacho在您的adapter.js之前添加这些语句。

if(!window.parent.io.sockets[location.protocol + '//' + location.host]){ return null; }

这些只是hack方法,虽然我认为这不是一个好的解决方案,但我没有找到为什么会出现这个问题。

于 2013-11-21T09:22:50.960 回答