2

Rhino でのアンカー タグの実装に根ざしていると思われる問題に遭遇しました。env.jsを利用していますが、何かを正しく構成していない可能性があります。

特に、angularjs アプリケーション用に記述されたコードに対して単体テストを記述しようとしているときに問題が発生します。(バージョン 1.2.1 から現在まで)を含めるangular.jsと、次のエラーが発生します。

TypeError: Cannot call method "charAt" of undefined

呼び出しによってオブジェクトが未定義 であることが明らかになるため、エラーはこの呼び出しの結果であると確信しています。urlParsingNode.pathnameconsole.logpathname

urlParsingNodeのインスタンス化をこの行までたどると、それが への呼び出しの結果であることがわかります。作成されたアンカー タグがブラウザを使用して URL を正しく解析することを期待して、この行に属性がdocument.createElement("a"); 設定されていることがわかります。 .href

Rhino を介して angular の JS 単体テストを試みたのは私が初めてではないと信じなければなりませんが、これまでのところ、Google で解決策を見つけることに成功していません。どんなヒントでも大歓迎です。

4

1 に答える 1

2

それを見つけて修正しました。pathnamegetter/setter は、単に in に対して定義されてHTMLAnchorElementいませんでしたenv.js

プル リクエストを送信しましたが、残念ながらプロジェクトはほとんど放棄されたようです。また、それを単一のファイルに構築する方法もわかりませんでした。おそらく誰かがそれをrequire.jsモジュールに分解することを自分自身で引き受けたようです. 私のユースケースのために戦う価値のある戦いではありません。

したがって、この問題に遭遇した他の人のために、必要なコードを以下に示します。に属しHTMLAnchorElement.prototypeます。私の 1.2 のコピーではenv.js、このプロトタイプは 8075 行目から始まります。8118 行目に以下を追加しました。

get pathname() {
  var uri = Envjs.urlsplit(this.href);
  return uri.path;
},
set pathname(val) {
  var uri = Envjs.urlsplit(this.href);
  uri.path = val
  this.href(uri.urlunsplit(uri));
},

参考までに、私の特定の問題はこのプルリクエストで解決されました。

于 2014-01-10T22:47:33.873 に答える