2

我遇到了一个问题,我认为这源于 Rhino 中锚标签的实现。虽然我正在使用env.js,但我怀疑我可能没有正确配置某些东西。

特别是,当我尝试针对为 angularjs 应用程序编写的代码编写单元测试时,会出现我的问题。当我包含angular.js(版本 1.2.1 到现在)时,我收到以下错误:

TypeError: Cannot call method "charAt" of undefined

我确信错误是此调用的结果,urlParsingNode.pathname因为console.log调用显示pathname对象未定义。

urlParsingNode我跟踪到这一行的实例化,我们看到它是对document.createElement("a"); 进一步向下的调用的结果,我们看到他们在这一行href中设置了属性,希望创建的锚标记将利用浏览器正确解析 URL .

我必须相信我不是第一个尝试通过 Rhino 对 Angular 进行 JS 单元测试的人,但到目前为止,我还没有成功地用谷歌搜索自己的解决方案。任何提示将不胜感激。

4

1 回答 1

2

找到它并修复它。pathnamegetter/setter 只是在inHTMLAnchorElement中未定义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 回答