2015-10-15 38 views
0

我有一個使用服務的控制器(使用$ resource),我試圖模擬服務方法的響應。 雖然我成功地嘲笑了服務方法,包括對該方法的響應,但控制器中的回調(這是我試圖測試的代碼段,從未被調用過)。

這是我的模擬。

var props = [ 
    { Uid: "123", Name: "Prop 1" }, 
    { Uid: "456", Name: "Prop 2" }, 
    { Uid: "789", Name: "Prop 3" } 
]; 
var mockPropertyService; 
beforeEach(inject(function ($q) { 
    mockPropertyService = { 
     query: function() { 
      return $q.when(props); 
     } 
    }; 
})); 

然後我注入我的模擬服務到我的控制器,它肯定是工作。

 var controller = $controller("PropertiesCtrl", { $scope: scope, Property: mockPropertyService}); 
     $rootScope.$apply(); 
     expect(.......) 

查詢方法在模擬服務上可用,並正在下面的代碼中的控制器中成功調用。但是回調函數沒有被調用。

這裏是控制器代碼,我想測試

$scope.loadProperties = function() { 
    return Property.query({ embed: 'models' }, function (properties) { 
     //I am trying to test this code in here 
     //But the test execution never gets to here 
     //but it also doesnt throw an exception 
     console.log(properties); 
     _.each(properties, function (p) { 
      p.PictureUrl = p.getThumbnailUrl(); 
      p.Calculated = p.isCalculated(); 
      p = Property.loadWorkflows(p); 

     }); 
    }); 
}; 

我在做什麼錯誤回調函數永遠不會被調用?

任何人都可以幫助或建議我 - 我已經嘗試了所有我能想到的。

+0

任何人沒有意見?這很明顯嗎? – Gotts

回答

1

問題是,我期待模擬訪問回調函數,這是從來沒有在模擬本身定義。我已經重新定義瞭如下的模擬,它的功能就像一個魅力!

beforeEach(inject(function ($q) { 
    mockPropertyService = { 
     query: function (params, callback) { 
      callback(props); //$q.when(workflows); 
      return props; 
     } 

    }; 
})); 

我也不再返回一個承諾,因爲在這個例子中,沒有必要