我有一个Controller,它使用的服务在成功时具有回调功能。
控制器功能
AND nvl(sodRow.activity_result_code, 'ASD') = 'ASD'
规范
itemCtrl.save = function () {
ItemService.save({ username: SessionService.getUsername() }, itemCtrl.item, function (res) {
$scope.$emit('UPDATE_ITEMS');
$modalInstance.close(res);
});
};
当我在业力中运行此测试时失败,因为未调用模态实例的关闭功能。我认为问题在于规范描述,因为该功能在应用程序中运行。 我对此有几个问题:
- 编辑 -
我已经改变了我的服务电话,让他们按照承诺处理结果:
it('should close the modal on successful save', function () {
spyOn(itemSrv, 'save').and.callFake(function () {
deferred = q.defer();
deferred.resolve();
return deferred.promise;
});
spyOn(modalInst, 'close').and.callThrough();
ItemCtrl.save();
scope.$digest();
expect(modalInst.close).toHaveBeenCalled();
});
我想我没有通过测试,因为我的服务没有返回一个promise(它有一个promise属性,我调用它来发出事件并关闭modalInstance)。但是我仍然对如何使用ng-resource返回一个承诺感到困惑。
我尝试解决它是返回一个带有$ promise属性的对象,该属性包含q提供的promise。
规范
itemCtrl.save = function () {
ItemService.save({ username: SessionService.getUsername() }, horas.trabajo).$promise.then(function (res) {
$scope.$emit('UPDATE_ITEMS');
$modalInstance.close(res);
});
};
答案 0 :(得分:3)
你混淆了承诺和回调的概念,但为了让它像现在一样有效,你可以使用它:
model(params) { return this.store.find('course', params.course_id); }
// now `model` will always be "course" in setupController
回调
传入将根据场景调用的函数
无极
获取一个包含方法的对象(然后),它将在成功时调用第一个参数或在出错时调用第二个参数
两者都有更多,但这是概述。
另外,我建议您更改服务中的spyOn(itemSrv, 'save').and.callFake(function (params, callback) {
callback({some: 'response'});
});
方法以返回承诺,而不是接受回调。