我遇到了an issue,我认为它源于Rhino中锚标记的实现。虽然我正在使用env.js,但我怀疑也许我没有正确配置。
特别是,当我尝试针对为angularjs应用程序编写的代码编写单元测试时,出现了我的问题。当我包含angular.js
(版本1.2.1到现在)时,我收到以下错误:
TypeError: Cannot call method "charAt" of undefined
我确信错误是this call到urlParsingNode.pathname
的结果,因为console.log
调用显示pathname
对象未定义。
我跟踪了urlParsingNode
到this line的实例化,我们看到它是调用document.createElement("a");
的结果。再往下,我们看到他们设置了href
this line中的}}属性希望创建的锚标记将利用浏览器正确解析URL。
我不得不相信我不是第一个尝试通过Rhino进行角度测试的JS单元测试,但到目前为止我还没有成功地使用Google搜索解决方案。任何提示将不胜感激。
答案 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解决。