2016-12-09 10 views
1

私は分度器でエンドツーエンドのテストを自動化しようとしていますが、私はsinonjsを使用して、ボタンのクリックによってトリガーされる特定のajax呼び出し(すべてではない)に応答するよう設定しています。sinonjsと偽のajax呼び出し

私は立ち往生していて、それについてどうやって動いているのかわからないし、オートメーションの初心者でもありません。私が正しい道にいるかどうかはわかりません。

var sinon = require('sinon'); 
describe("SinonFakeServerTest", function() { 
    var fakeServer; 
    beforeEach(function() { 
     fakeServer = sinon.fakeServer.create(); 
     fakeServer.autoRespond = true; 

     var data = {key1: 'xyz', key2: 'abc'}; 
     var response = [ 200, { "Content-Type": "application/json" }, data ]; 
     fakeServer.respondWith('/abc/xyz/*', response); 
    } 

    afterEach(function() { 
     fakeServer.restore(); 
    } 

    it("should fake a ajax request", function() { 
     // click on this button triggers ajax call.. 
     element(by.css('.take-button')).click(); 
     //should show fake data on ui 
    }); 
}); 

これは、生産コードはAJAX呼び出しのためのjQueryのを使用していたとき、私はSinonのfakeServer機能で正常に偽のサーバーではありませんでしボタンクリックコントローラとモデル

'.take-button click' : function(el, ev) { 
    model.getData(listParams, this.proxy('setUpData')); 
}, 

getList : function(params, success) { 
    $.ajax({ 
     url : '/abb/xyz/getAll.htm', 
     dataType : 'json', 
     type : "GET", 
     data : { 
      params : params 
     }, 
     success : success 
    }); 
} 
+0

)選択されたAJAX呼び出しをハックするmockjaxを使用してbrowser.executeScript(を通じて、このスクリプトを注入さは本番コード – luboskrnac

+0

@luboskrnacを表示 - 私は、ボタンclick..thanks上で実行されるコードが追加されました!! – zeah

答えて

0

の生産コードです。

$.ajaxのための単純なシノンスタブを試してみることをお勧めします。 sinonjs.orgサイト上の例では、(セクションTesting Ajaxに見て)実際にあります:

after(function() { 
    // When the test either fails or passes, restore the original 
    // jQuery ajax function (Sinon.JS also provides tools to help 
    // test frameworks automate clean-up like this) 
    jQuery.ajax.restore(); 
}); 

it("makes a GET request for todo items", function() { 
    sinon.stub(jQuery, "ajax"); 
    getTodos(42, sinon.spy()); 

    assert(jQuery.ajax.calledWithMatch({ url: "/todo/42/items" })); 
}); 
+0

私が達成しようとしているのは、ボタンクリック時にカスタムHTTPレスポンスを送信することです。 – zeah

0

私はsinonjsなし分度器で上記の問題を解決しました。 私は