1

現在、次のパラメーターをコンストラクター引数として受け取る JavaScript ゲーム モジュールを作成しています。

{
  gameId : "string for unique game id",
  cssSelector: "selector for target (used to initialze game)"
 }

これを回避する方法を見つけました。以下の新しいコメントを参照してください

他のすべてについてはかなり良いテスト カバレッジがありますが、次の Jasmine テストの書き方がわかりません。

describe("Initialization of game", function() {
        it("Should throw expection if css selector is not found", function() {

           // what goes here?

            //negative scenario
           expect(function(){
                          var game = new Game({gameId : '1', cssSelector : "#not-found"});
                        }).toThrow("Cannot find the element corresponding to cssSelector");

          //positive senario
           expect(function(){
                          var game = new Game({gameId : '1', cssSelector : "#found"});
                        }).not.toThrow("Cannot find the element corresponding to cssSelector");
        });

「解決策」 私が「解決策」と言うのは、これを回避するのが少しハックのように感じるからです。テストが HTML で実行され、環境を操作できるという事実を利用します。だから私がしたことは:

  1. 否定的なシナリオでは、見つからない指定子を使用します。最初の期待は失敗しません。
  2. 肯定的なテスト ケースと否定的なテスト ケースの間で、jQuerys .append() メソッドを使用して、id "found" を持つ div を本文に追加しました。

それでおしまい!

4

3 に答える 3

1

より詳細な DOM テストが必要な場合、Jasmine だけではできません。

単純な DOM 要件と 1 つのテストについては、現在行っていることを引き続き行うことができます。

単純だが繰り返しテストを行うには、 と を使用beforeEachafterEachて、テスト中に必要な DOM 要素を設定および破棄します。

最も単純な DOM テスト以外の場合は、https ://github.com/jeffwatkins/jasmine-dom のようなものを使用して Jasmine を DOM に拡張できます。

于 2013-01-10T15:12:11.647 に答える
0

たぶん、あなたが欠落している);から"#not-found"}ですか?

于 2013-01-10T11:41:36.773 に答える
0

jQuery ではこれでうまくいきます。そのような DOM ノードがある場合、長さは 0 より大きくなります。

var exists = $('cssSelector').length > 0;
于 2013-01-10T12:15:49.383 に答える