問題タブ [utest]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
jquery - Scala.js クラスのモック
サーバーからカテゴリのリストを取得する Scala.js で記述された React コンポーネントをテストしようとしています。コンポーネントに代替のjQueryインスタンスを提供できましたが、jQueryモック自体はコンパイルできません。モックのコードは次のとおりです。
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 JQueryStatic
andを捨ててnew JQueryXHR {}
戻り値の型を変更するとdef get
、クラスは正常にコンパイルされます。このようにして、AJAX を処理する jQuery ラッパーを作成することができ、これをモックすることができます。これは機能しますが、非常に多くの問題があるようです。これを行う他の方法はありますか?
scala - sbt play クロス ビルド プロジェクトのセットアップ: uTest ランナーがクライアント/サーバー プロジェクトを正しく分離しない
私は build.sbt を使用しています。これはクロス コンパイル設定があり、基本的には " Play with scala-js example " の適応バージョンであり、テスト用のクリーンなセットアップを取得するのに問題があります。具体的には、サーバー テストを実行すると、クライアント テストも実行されます (これは避けたいことです)。
uTest を取得してテストを表示できないの指示に従い、 追加しました
libraryDependencies += "com.lihaoyi" %%% "utest" % "0.3.0"
何らかの理由で、追加するまでテストが実行されませんでした
testFrameworks += new TestFramework("utest.runner.Framework")
すべてのプロジェクト定義に。また追加しない
"com.lihaoyi" %% "utest" % "0.3.1" % "テスト"
サーバー側への一連のトリガー
見つかりません: オブジェクト utest [エラー] インポート utest._ -スタイル エラー。
私の印象では、クリーンなセットアップがあれば、これらの追加設定をまったく追加する必要はありません。これが私のsbtファイルです:
そして、ここに私の問題の要約があります:
- クライアント/テストを実行すると、クライアント テストのみが実行されます
- play-with-scalajs-example/test を実行すると、クライアント + 共有テストが実行されます
- 奇妙なことに、サーバー/テストを実行すると、サーバーとクライアントのテストが実行されます
プロジェクト設定を次のように変更するにはどうすればよいですか
- server/test の実行時にサーバー テストを見つける
- play-with-scalajs-example/test の実行時にすべてのテストを実行する
- さらに、サーバー/テストまたはクライアント テストを実行するときに共有テストを含めますか?
また、別のノードで、scalatest を無効にする方法はありますか? それはかなり読みにくいテスト出力につながります:
どうもありがとうございました。
scala - asInstanceOf 強制に関する Scala の防御コーディング
適切なケース:
その例外にぶつかるソースの場所は次のとおりです。行のコピーは次のとおりです。
明日、この特定のケースを追跡するために utest をデバッグします。これは、私の utest 対応プロジェクトの 1 つだけで発生するため、エッジ ケースである必要があります (おそらく、ディレクトリ パスとパッケージ アラインメントに関連しています)。
しかし、コードが への呼び出しの前にエラー状態をキャッチできるように、この種のリフレクション エラーを回避する防御的なプログラミングの良い形を提案できますasInstanceOf
か、または代わりに、catch ブロックの慣用的なコード - 強制失敗の理由を伝えます。より実用的な方法で?
scala - クリック イベントのテストが失敗する
私はscala.js の公式チュートリアルに従っており、テスト部分には次のようなコードがあります。
for ループのイベント ベースのテストは、次の場合に失敗しsbt test
ます。
プロジェクト全体はこちら: https://github.com/kindlychung/scalajstutorial
クリック動作は次のように定義されています。
scala - uTest でテストを実行できません
Scala.JSの基本チュートリアルに従っています。また、uTest を取得してテストを確認することもできません
build.sbt を次のように更新します。
私が作成しました
src/test/scala/tutorial/webapp/TutorialTest.scala
sbt をリロードしてから「test」と入力すると、常に次のエラーが表示されます。
[エラー] MyProject/src/main/scala/tutorial/webapp/TutorialTest.scala:3: 見つかりません: オブジェクト utest [エラー] import utest._
build.sbt から末尾の {% "test"} を削除すると、sbt から「test」コマンドを実行できますが、テストが取得されません。
ここで意味を成していることを願っています。このエラーは私を困惑させました。
scala - カスタム µtest テストランナー用の Sbt フック
Scala sbt プロジェクトでµtestを使用しています。このようなコードで構成されるカスタムメイドのテストランナーでさまざまなテストクラスを実行したい
sbt test の実行時に実行したいのですが、私が見つけた唯一の方法は、utest.Testsuite を拡張して tests メソッドを空のままにすることです。
このように、sbt はクラスを見つけて実行しますが、解決策は理想的ではないようです。utest.Testsuite を拡張しないことでsbt のランナーが実行AnotherClassWithTests
されるのを防ぐことができますが、それでも自分の出力と一緒に µtests のデフォルト テスト ランナーから不要な出力が得られます。
そのハックなしでランナーをフックsbt test
して、すべてのテストをそれで実行し、µtests のデフォルト ランナーをスキップするにはどうすればよいですか?
sbt によって検出された µ-tests のリストにもアクセスできますか?
scala - オブジェクトまたは他の単一リソースをテストする方法 / uTest で並列テストを無効にする方法
https://github.com/lihaoyi/utest
ドキュメントで述べたように、uTest はテストを並行して実行します。1 つのテスト スイート内のテスト ケースを使用すると、連続して実行できます
しかし、sbt は異なるテスト スイートを常に並行して実行します。https://github.com/lihaoyi/utest#parallel-testing
これは通常、パフォーマンスには適していますが、オブジェクトやその他の「単一リソース」をテストする場合、問題が発生する可能性があります。同じオブジェクトがテストされたり、複数のテスト スイートで使用されたりすると、これらの並列テストが互いに干渉する可能性があります。
ロギングは良い例です。ロギングは共通のファクトリ オブジェクトを使用する場合があり、場合によっては、このオブジェクトにはデフォルトのロギング レベルやログ インスタンスのデータ構造などの状態が含まれる場合があります。ロギングは複数の SW モジュール / 複数のテスト スイートで使用され、これらのテスト スイートはロギング自体をテストし、他のテスト スイートはロギング テスト スイートでランダムな偽の結果を引き起こす可能性があります。データベースは「単一リソース」のもう 1 つの例です。
どのテスト スイートを常に順番に実行し、どのテスト スイートを並列実行できるかをユーザーが決定できるように、uTest テスト スイートの並列実行を制限する方法はありますか?
例: テスト スイートを実行します。
sbt「スクリプト」は良い解決策ではありません
何も並行して実行されず、すべてのテスト スイートをリストする必要があるためです。このようなものが良いかもしれません:
つまり、残りは並列に実行でき、どのような順序でも実行できます。または
つまり、すべてのテスト スイートが順番に実行されます。