“在业力 - 茉莉花单元测试中无法读取未定义的属性'传输'

时间:2013-11-04 05:30:03

标签: angularjs socket.io jasmine karma-runner

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

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

1 个答案:

答案 0 :(得分:0)

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

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

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