Anchor元素的路径名在rhino中使用env.js返回undefined

时间:2014-01-09 18:42:17

标签: javascript unit-testing angularjs rhino envjs

我遇到了an issue,我认为它源于Rhino中锚标记的实现。虽然我正在使用env.js,但我怀疑也许我没有正确配置。

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

TypeError: Cannot call method "charAt" of undefined

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

我跟踪了urlParsingNodethis line的实例化,我们看到它是调用document.createElement("a");的结果。再往下,我们看到他们设置了href this line中的}}属性希望创建的锚标记将利用浏览器正确解析URL。

我不得不相信我不是第一个尝试通过Rhino进行角度测试的JS单元测试,但到目前为止我还没有成功地使用Google搜索解决方案。任何提示将不胜感激。

1 个答案:

答案 0 :(得分:2)

找到并修复它。在pathname HTMLAnchorElement中,env.js getter / setter未定义。

我提交了a pull request,但不幸的是,该项目看起来几乎全部被遗弃。我也无法弄清楚如何将它构建到单个文件中。似乎有人已经把它分解成require.js模块。不是值得为我的用例而战的战斗。

因此,对于遇到此问题的其他人,我会在下面提供您需要的代码。它属于HTMLAnchorElement.prototype。在env.js 1.2的副本中,这个原型从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));
},

仅供参考,我的特定问题已通过this pull request解决。