org_scalajs_dom_raw_HTMLDocument(...).createRange 不是函数
org_scalajs_dom_raw_HTMLDocument(...).createRange is not a function
作为将 scalaJS 从 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
调用提取到一个单独的测试中,但得到了同样的错误。打印了“创建范围”; “创建的范围”不是,它产生了与上面相同的异常。
createRange()
是原生函数。
谷歌搜索“createRange is not a function”会产生许多类似的问题,似乎都与测试有关(但与 ScalaJS 无关)。他们中的许多人表示“修复”是使用您自己的 createRange
版本对 document
进行猴子补丁。真的吗?
我最初认为这是 scalatags 的问题。然后我认为它与 scalajs 库有关。现在我认为它与 Node.js 有关,尽管 Google 没有生产任何确凿的证据。
关于如何进行的建议?试试猴子补丁 document
?
总结:jsdom 在使用 Node.js 进行测试时似乎缺少 document.createRange
功能。其他语言的其他人有 similar problems.
以下猴子补丁对我有用。开发这个之后,我注意到 Facade Types 有一个关于猴子打字的部分。
此外,引起此错误 (scalatags) 的库代码实际上调用了 document.createRange().createContextualFragment(v)
。所以我也需要为此提供一些东西。
import scala.scalajs.js
import org.scalajs.dom.document
js.Dynamic.global.document.createRange = () ⇒
js.Dynamic.literal(
setStart = () => js.Dynamic.literal(),
setEnd = () => js.Dynamic.literal(),
commonAncestorContainer = js.Dynamic.literal(
nodeName = "BODY",
ownerDocument = document
),
createContextualFragment = (v: String) ⇒ {
val p = document.createElement("p")
p.appendChild(document.createTextNode(v))
}
)
作为将 scalaJS 从 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
调用提取到一个单独的测试中,但得到了同样的错误。打印了“创建范围”; “创建的范围”不是,它产生了与上面相同的异常。
createRange()
是原生函数。
谷歌搜索“createRange is not a function”会产生许多类似的问题,似乎都与测试有关(但与 ScalaJS 无关)。他们中的许多人表示“修复”是使用您自己的 createRange
版本对 document
进行猴子补丁。真的吗?
我最初认为这是 scalatags 的问题。然后我认为它与 scalajs 库有关。现在我认为它与 Node.js 有关,尽管 Google 没有生产任何确凿的证据。
关于如何进行的建议?试试猴子补丁 document
?
总结:jsdom 在使用 Node.js 进行测试时似乎缺少 document.createRange
功能。其他语言的其他人有 similar problems.
以下猴子补丁对我有用。开发这个之后,我注意到 Facade Types 有一个关于猴子打字的部分。
此外,引起此错误 (scalatags) 的库代码实际上调用了 document.createRange().createContextualFragment(v)
。所以我也需要为此提供一些东西。
import scala.scalajs.js
import org.scalajs.dom.document
js.Dynamic.global.document.createRange = () ⇒
js.Dynamic.literal(
setStart = () => js.Dynamic.literal(),
setEnd = () => js.Dynamic.literal(),
commonAncestorContainer = js.Dynamic.literal(
nodeName = "BODY",
ownerDocument = document
),
createContextualFragment = (v: String) ⇒ {
val p = document.createElement("p")
p.appendChild(document.createTextNode(v))
}
)