Jasmine test for AngularJS nested callback,angularjsnested
今天寫了一個function,裡面涉及了兩個callback,大概形式為
function callbackFunction() {ServiceA.callbackA(data1, function(result1){//success function callbackServiceA.callbackA(data2, function(result2{return [result1, result2];}, function(error){console.log(error);});}, function(error){console.log(error);};}
為這個function寫jasmine unit test的時候遇到了問題。一開始我是這麼寫的:
首先mock一個ServiceA及callbackA
mockServiceA = jasmine.createSpyOn('ServiceA', ['callbackA']);
然後通過callFake假設callback結果
var data1 = 'data1';var data2 = 'data2';mockServiceA.callbackA.and.callFake(data1, function(){success(data1);}, function(){});mockServiceA.callbackA.and.callFake(data2, function(){success(data2);}, function(){});
但這樣寫以後最後返回的結果為['data2', 'data2'],因為第二次callFake會覆蓋第一次
解決辦法,定義一個result hash根據parameter來指定返回結果
var data1 = 'data1';var data2 = 'data2';var result = {data1: data1,data2: data2}mockServiceA.callbackA.and.callFake(data, function(){success(result.data);}, function(){});
這樣以後最後能成功返回mock的結果['data1', 'data2']