代码之家  ›  专栏  ›  技术社区  ›  invariant

如何使用“”定义全局作用域方法以名称

  •  -2
  • invariant  · 技术社区  · 7 年前

    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
    }
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   sjrd    7 年前

    出于所有实际目的,没有名为的JS函数 test.only 。更有可能的是,有一个顶级对象的名称为 test ,它有一个名为 only

    @js.native
    @JSGlobal("test")
    object JestTest extends js.Object {
      def only(str: String, function: js.Function0[_]): Unit = js.native
    }
    

    测验 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
    
    }