4

casperjs を使用してエンドツーエンドのテストを作成しており、ajax サーバーの応答を偽造したいと考えています。

私は、次のように、xmlhttprequest オブジェクトをモックし、常に期待される結果を返す単純なスクリプトを含めるというアイデアを思いつきました。

var ajax_requests = [
    ['GET', '/jobs', JSON.stringify(jobs)]
], stubs = stubs || {};

function setup_ajax(){
    stubs.server = sinon.fakeServer.create();
    _.each(ajax_requests, function(r){ 
        //r[1] = "http://localhost:8000" + r[1]
        r[2] = [200, { "Content-Type": "application/json" }, r[2]]
        stubs.server.respondWith.apply(stubs.server, r)
    })
    stubs.server.autoRespond = true;
    stubs.server.autoRespondAfter = 2;
}

次に、次のようsetup_ajaxにキャスパー テストを呼び出します

casper.then(function(){
    this.evaluate(setup_ajax)
}

しかし、今後の ajax リクエストは、まだ私の xmlhttprequest 実装を避けているようです。

$.ready() を使用してその場で setup_ajax を実行し、casper からも呼び出してみましたが、どちらも機能しませんでした

さらに興味深いことに、オブジェクトの存在のチェックが奇妙なことに失敗します。

function setup_ajax(){
    return typeof(sinon)
}

casper.then(function(){
    var x = this.evaluate(setup_ajax)
    casper.log(x) // logs 'null'
}

ただし、sinon は適切に含まれています。少なくとも、setup_ajax 関数の外部で casper を呼び出したときにエラーは発生しませんでしたが、故意に sinon を除外したときにエラーが発生しました。

casperjs で xmlhttprequests をモックするアイデアはありますか?

4

2 に答える 2

4

sinon.js を使用してXmlHttpRequestを偽造できます。

于 2012-07-07T18:19:46.933 に答える