1

サーバーからカテゴリのリストを取得する Scala.js で記述された React コンポーネントをテストしようとしています。コンポーネントに代替のjQueryインスタンスを提供できましたが、jQueryモック自体はコンパイルできません。モックのコードは次のとおりです。

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 コンパイラによると、このコードには 2 つの問題があります。

  • 警告:(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 JQueryStaticandを捨ててnew JQueryXHR {}戻り値の型を変更するとdef get、クラスは正常にコンパイルされます。このようにして、AJAX を処理する jQuery ラッパーを作成することができ、これをモックすることができます。これは機能しますが、非常に多くの問題があるようです。これを行う他の方法はありますか?

4

1 に答える 1

1

ファサードを使用してテストを作成しましたが、これはモックです。

ファサード

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

モック

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)
    }
  }
}
于 2015-08-19T08:23:08.147 に答える