升级ScalaJS1.4.0与scalatags0.9.3后测试报createRange非函数如何解决
问题背景
在将Scala.js从0.6.x版本升级到1.4.0版本的工作中,同步将scalatags依赖从0.6.7版本升级到0.9.3版本,执行测试用例时抛出如下异常:
scala.scalajs.js.JavaScriptException: TypeError: $m_Lorg_scalajs_dom_package$(...).document__Lorg_scalajs_dom_raw_HTMLDocument(...).createRange is not a function
问题定位进展
- 通过代码链路追踪,定位到异常触发点为scalatags.JsDom模块下对应scalatags代码的第141行,问题代码有对应留存的参考截图。
- 单独提取
createRange调用逻辑编写独立测试用例,复现了完全一致的报错:测试逻辑中"creating range"日志正常打印,但后续"created range"日志未输出,抛出相同异常,已知createRange()本身是浏览器原生函数。 - 检索
createRange is not a function相关问题时,发现大量同类报错都出现在非Scala.js技术栈的测试场景中,不少解决方案是通过monkey-patch方式为document对象自定义实现createRange方法,我对这类方案的合理性存疑。
排查方向推测与核心疑问
- 最初怀疑问题出在scalatags依赖本身,之后猜测是Scala.js库的兼容问题,现在进一步推测问题根源可能和Node.js运行环境有关,但暂未检索到明确的相关佐证。
- 核心疑问:后续排查应从哪些方向切入,是否真的需要通过monkey-patch方式为document补全
createRange方法?独立测试环节也有对应留存的参考截图。
内容的提问来源于stack exchange,提问作者bwbecker
相关产品推荐
相关产品推荐

