3

単一のテスト仕様から複数の ajax リクエストをスパイすることはできません。JASMINE を使用して以下をテストしたいと考えていmyFirstFunction()ますmySecondFunction()

function myFirstFunction() {
    $.postJSON('test1.htm', {operation:operation}, function (data) {    
        if (data != null && data.errorMsg != null && data.errorMsg.length > 0) {
            $.populateErrorMessage(data);
        } else { 
            operationAccess = data;
            var tempAccessFlag = operationAccess[0].accessFlag;
            if (tempAccessFlag) {
                mySecondFunction();
            }                  
        }
    });
}

function mySecondFunction(operation, operationAccess, reason) {
        $.postJSON('test2.htm', {windowStart:0, windowSize:4}, function (data) {
            if (data != null && data.errorMsg != null && data.errorMsg.length > 0) {
                $.populateErrorMessage(data);
            } else {
                if (null != data && data.accessFlag == "SUCCESS") {
                    //do something
                } else {
                    //do something
                }
            }
        });
}

私は次のテスト仕様を書きました & 次のように最初の postJSON をスパイすることができます -

it("Test myFirstFunction & mySecondFunction", function () {
        var operation = "customerPreviousOrder";
        var myFirstFunctionData = [{"accessFlag":true}]
        spyOn($, "ajax").andCallFake(function(params) {
            params.success(myFirstFunctionData);
        });
        myFirstFunction();
        expect(<Something>).toEqual(<Something>);

});

mySecondFunction()上記のテスト仕様からテストしたい。myFirstFunction()を呼び出すためですmySecondFunction()。では、どうすれば 2 番目の postJSON をスパイできますか?

4

4 に答える 4

0

以下の問題のダミーの解決策を試すことができます。

ソース関数:

function myFunction(){
 $.ajax({                               //First Ajax Call
    url: <URL1>,
    type: 'POST',
    dataType: 'json',
    data: JSON.stringify(data),
    contentType: "application/json; charset=utf-8",
    async: false,

    success: function (data) {
            … some success statement
    } else {
           var enableCardReaderCall = $.ajax({            //Nested Ajax Call
                    type: 'POST',
                    url: <URL2>,
                    dataType: 'json',
        data: JSON.stringify(data),
                   contentType: "application/json; charset=utf-8",

                    success: function (result) {
    // … some success statement
                    }
              }
 });

}); }

テスト スイート:

describe("Test Suit", function(){
   beforeEach(function () {
      var fakeData = "hi";
     spyOn($, "ajax").andCallFake(function(params) {            //First Spy On 
        params.success(function(fakeData){
            spyOn($, "ajax").andCallFake(function(params) {     //Nested Spy On
               params.success("there is data")
            })
        });
     });
});
it("Test Function", function() {
    $.myFunction();
});

});

于 2013-07-11T15:37:39.087 に答える
0

ajax関数の引数にurl値があります。

describe("Test Suit", function() {
  beforeEach(function() {
    spyOn($, 'ajax').and.callFake(function(options) {
      if (options.url === 'test1.htm') {
        options.success([{"accessFlag":true}]);
      } else {
        options.success('second answer'); 
      }
    });
  });
  it("Test myFirstFunction & mySecondFunction", function () {
    myFirstFunction();
    expect(<Something>).toEqual(<Something>);
  }
});
于 2014-01-16T05:31:02.207 に答える