19

私はいくつかの簡単なジャスミンテストを書いています.jsファイルのみをテストするときにDOMがないため、テストしているコードが存在しないフォームを探しているため、例外が発生します:$("form")[0]テストされたjsファイルでは:

TypeError: $(...)[0] is undefined

jasmine-jquery について少し読んだところ、外部の html ファイルで html フィクスチャを使用できることに気付きました。そのフローは非常に面倒に思えます。テスト (他の何かに焦点を当てている) が実行されるように空の有効なフォームを追加するだけなので、<form></form>追加のようなもので十分だと思います。

最初はsandbox()関数が解決策になると思っていましたが、divしか作成されないようで、フォームが必要です。

ジャスミンスペックファイルのコードのみを使用していくつかの要素を追加する簡単な方法はありますか?

4

3 に答える 3

38

最も簡単な解決策は、beforeブロックで自分でフォームをDOMに追加し、afterブロックでそれを削除することです。

describe(function(){
  var form;

  beforeEach(function(){
    form = $('<form>');
    $(document.body).append(form);
  });

  it('your test', function(){


  })

  afterEach(function(){
   form.remove();
   form = null;
  });
});

また、サンドボックスヘルパーを作成することはそれほど難しくありません。

function sandbox(html){
  var el;

  beforeEach(function(){
    el = $(html);
    $(document.body).append(el);
  });


  afterEach(function(){
   el.remove();
   el = null;
});
于 2013-01-12T10:35:39.320 に答える
3

別のアプローチは、ジャスミンフィクスチャを使用することです

コンセプト

これについて考える1つの方法は次のとおりです。

jQuery では、$() に CSS セレクターを指定すると、DOM 上の要素が検索されます。

jasmine-fixture では、affix() に CSS セレクターを指定すると、それらの要素が DOM に追加されます。

これは、接辞を使用して DOM の状態を設定した後、テスト対象のコードに作業に必要な要素が含まれていることを意味するため、テストに非常に役立ちます。

最後に、jasmine-fixture は、各仕様の実行後に DOM に貼り付けたすべてのものを片付けて削除することにより、テスト汚染を回避するのに役立ちます。

参照: SO: Jasmine テストでの dom 操作

于 2014-12-28T08:45:54.200 に答える