0

Jasmine jQueryを使用してカスタムjavascriptモジュールのAJAXリクエストをテストしており、最終的にはDOMの後処理操作ですが、Jasmineテストでは新しく操作された要素が見つかりません。

ジャスミンテストは次のとおりです...

describe("#init", function() {
  it("should return a JSON object from the server", function() {
    loadFixtures("top_content_container.html");

    // This method will add 'div.search_result' to the 'div.top_content' container
    SC.init();

    expect($('div.top_content')).toContain('div.top_content_container');
    expect($('div.top_content')).toContain('div.search_results');

   // THIS TEST SHOULD PASS, BUT DOES NOT DETECT THE DOM UPDATES AND DOES NOT
   expect($('div.top_content div.search_result').length == 10).toBeTruthy();
  });
});

メソッド内で、SC.init()要素をDOMに追加してから、AJAXリクエストを実行します。このリクエストは、データを返し、それをDOMに挿入します。これらの新しく作成された要素は「div.search_result」と一致します。

すべてのAJAXリクエストが正しく実行されており、SCライブラリがすべての要素をDOMに適切に挿入していることを確認しました。機能の観点から、ライブラリは機能しています。問題は、Jasmineテストを取得してDOMの更新を確認する方法です。繰り返しになりますが、SCコードベースのデバッグを支援する必要はありません。テスト自体のデバッグについてサポートが必要です。

あなたは強打から何かを見ますか?

4

2 に答える 2

1

AJAX は非同期であるため、AJAX リクエストが応答を受け取る前に、Jasmine 仕様が検索結果に関するアサーションに到達している可能性があります。jasmine.Ajax.useMock()呼び出す前にa を実行してSC.init()から、成功した応答を渡すことができます。これにはJasmine-Ajaxが必要です。

于 2012-09-23T06:44:00.583 に答える
0

https://github.com/velesin/jasmine-jqueryのようなライブラリは、より強力になります。ただし、非同期クエリにruns / waitsForを使用して、大まかな解決策を使用することもできます。

 it("should load asynchronously", function() {

     runs(function() {
        $el = $('<div id="jasmine-insert">').appendTo('body');
        $el.load('path/file.html');
      });
      waitsFor(
        function() {  return $el.html().length > 0; }, // tested at intervals
        "html couldn't be loaded", // message on error
        500); // wait time out
      runs(function() {
        expect($('div.top_content').find('div.top_content_container').toEqual(1));
      });

  });
于 2012-09-29T01:38:52.527 に答える