我有一个使用服务的控制器(使用$ 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 :(得分:1)
问题在于我期望mock能够访问从未在模拟本身上定义的回调函数。我已经重新定义了下面的模拟,它就像一个魅力!
beforeEach(inject(function ($q) {
mockPropertyService = {
query: function (params, callback) {
callback(props); //$q.when(workflows);
return props;
}
};
}));
我也不再回复承诺,因为这个例子没有必要