我正在尝试为https://facebook.github.io/jest/docs/en/api.html#testonlyname-fn
定义外观@JSGlobalScope
@js.native
object JestGlobal extends js.Object {
def test(str: String, function: js.Function0[_]): Unit = js.native
@JSName("test.only")
def testOnly(str: String, function: js.Function0[_]): Unit = js.native
def expect[T](in:T) : Matcher[T] = js.native
}
@js.native
trait Matcher[T] extends js.Object {
def toBe(in:T):Unit = js.native
}
调用名称无效的全局范围的方法 不允许使用JavaScript标识符。 [错误]见 https://www.scala-js.org/doc/interoperability/global-scope.html 进一步的信息。
编辑:(答案)
def test : JestTestObject = js.native
@js.native
trait JestTestObject extends js.Object {
def only(str: String, function: js.Function0[_]): Unit = js.native
}
答案 0 :(得分:1)
出于所有实际目的,没有名称为test.only
的JS函数。更有可能的是,有一个名为test
的顶级对象,并且它有一个名为only
的方法。您可以将其建模为:
@js.native
@JSGlobal("test")
object JestTest extends js.Object {
def only(str: String, function: js.Function0[_]): Unit = js.native
}
您还可以使用相同的对象来表示名称为test
的顶级函数(因为显示库是这样的),通过添加apply
方法:
@js.native
@JSGlobal("test")
object JestTest extends js.Object {
// This is the test(...) function
def apply(str: String, function: js.Function0[_]): Unit = js.native
// This is the test.only(...) function
def only(str: String, function: js.Function0[_]): Unit = js.native
}
您的变体作为自我回答也是有效的,但可以使其更加惯用,如下所示:
@js.native
@JSGlobalScope
object JestGlobal extends js.Object {
@js.native
object test extends js.Object {
// This is the test(...) function
def apply(str: String, function: js.Function0[_]): Unit = js.native
// This is the test.only(...) function
def only(str: String, function: js.Function0[_]): Unit = js.native
}
def expect[T](in: T): Matcher[T] = js.native
}