2

AngularJs でプロジェクトをビルドし、Karma と jasmine で単体テストを行いました。Angular プロジェクトのコントローラーの 1 つは、サーバーでデータを転送するために socket.io を参照する必要があります。そして、このコントローラーの単体テストケースを書きました。アナは「socket.io.js」ファイルを「karma.conf.js」に追加します。カルマでテストすると、エラーがスローされます: 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

@Zacho は、これらのステートメントを adapter.js の前に追加return...ます。

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

これらは単なるハック方法ですが、これは良い解決策ではないと思いますが、なぜこの問題が発生するのかわかりませんでした。

于 2013-11-21T09:22:50.960 に答える