首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模拟Scala.js类

模拟Scala.js类
EN

Stack Overflow用户
提问于 2015-08-19 07:03:31
回答 1查看 407关注 0票数 1

我正在尝试测试用Scala.js编写的React组件,该组件从服务器获取类别列表。我能够为组件提供替代的jQuery实例,但是jQuery模拟本身无法编译。下面是code的代码:

代码语言:javascript
复制
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.Any的特征、类和对象的成员可能只包含调用js.native的成员。这将在1.0中强制执行。 override def get(url: String, data: js.Any, success: js.Any, dataType: js.Any): JQueryXHR = {
  • 错误:(19,9)扩展js.Any的特征、类和对象可能没有内部特征、类或对象 new JQueryXHR {}

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

编辑

如果我抛出extends JQueryStaticnew JQueryXHR {}并更改def get的返回类型,该类就会编译得很好。通过这种方式,我可以编写处理AJAX的jQuery包装器,我将能够模拟这些东西。这是可行的,但似乎是一个很大的麻烦。还有别的办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-19 08:23:08

我使用我的外观创建了测试,它是模拟的:

正面

代码语言:javascript
复制
class Http {
  def get(url: String)(success: (js.UndefOr[js.Any]) => Unit): Unit =
    jQuery.getJSON(url, js.undefined, success)
}

Mock

代码语言:javascript
复制
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)
    }
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32088608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档