Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 模拟Scala.js类_Jquery_Testing_Mocking_Scala.js_Utest - Fatal编程技术网

Jquery 模拟Scala.js类

Jquery 模拟Scala.js类,jquery,testing,mocking,scala.js,utest,Jquery,Testing,Mocking,Scala.js,Utest,我试图测试用Scala.js编写的React组件,它从服务器获取类别列表。我能够为组件提供可选的jQuery实例,但是jQuery模拟本身无法编译。以下是mock的代码: import org.scalajs.jquery.{JQueryXHR, JQueryStatic} import scala.scalajs.js import utest._ class jQueryMock extends JQueryStatic { var awaitedRequests = Map.em

我试图测试用Scala.js编写的React组件,它从服务器获取类别列表。我能够为组件提供可选的jQuery实例,但是jQuery模拟本身无法编译。以下是mock的代码:

import org.scalajs.jquery.{JQueryXHR, JQueryStatic}

import scala.scalajs.js
import utest._

class jQueryMock extends JQueryStatic {

  var awaitedRequests = Map.empty[String, PartialFunction[js.Any, js.Any]]

  def whenGet(url: String)(response: PartialFunction[js.Any, js.Any]): Unit = {
    awaitedRequests += (url -> response)
  }

  override def get(url: String, data: js.Any, success: js.Any, dataType: js.Any): JQueryXHR = {
    awaitedRequests.get(url) match {
      case Some(response) =>
        if(response.isDefinedAt(data))
          success.asInstanceOf[(js.Any) => Unit](response(data))
        else
          assert(false)
      case None => assert(false)
    }
    new JQueryXHR {}
  }
}
根据Scala.js编译器,此代码中存在两个问题:

  • 警告:(14,95)扩展js的traits、class和objects的成员。任何成员只能包含调用js.native的成员。这将在1.0中强制执行

    覆盖def-get(url:String,data:js.Any,success:js.Any,dataType:js.Any):JQueryXHR={

  • 错误:(19,9)扩展js的特性、类和对象。任何特性、类或对象都可能没有内部特性、类或对象

    newjqueryxhr{}

是否有其他方法来模拟Scala.js中的任何本机类(或者实际上有其他方法来测试后端查询)?

编辑


如果我抛出
扩展JQueryStatic
新JQueryXHR{}
并更改
def get
的返回类型,该类可以很好地编译。通过这种方式,我可以编写处理AJAX内容的jQuery包装器,我可以对其进行模拟。这会起作用,但似乎会带来很多麻烦。还有其他方法吗?

我已经使用facade创建了测试,并且它是模拟的:

正面

class Http {
  def get(url: String)(success: (js.UndefOr[js.Any]) => Unit): Unit =
    jQuery.getJSON(url, js.undefined, success)
}
Mock

class HttpMock extends Http {

  var awaitedRequests = Map.empty[String, js.Any]

  def whenGet(url: String, response: js.Any): Unit = {
    awaitedRequests += (url -> response)
  }

  def verifyNoOutstandingRequests() =
    assert(awaitedRequests.isEmpty)

  override def get(url: String)(success: (js.UndefOr[js.Any]) => Unit): Unit = {
    awaitedRequests.get(url) match {
      case Some(response) =>
          success(response)
          awaitedRequests -= url
      case None => assert(false)
    }
  }
}