【发布时间】:2014-05-19 07:01:11
【问题描述】:
根据 Michal Charemza 帖子编辑。
我有一个代表 angularui 模态对话框的服务:
app.factory("dialogFactory", function($modal, $window, $q) {
function confirmDeleteDialog() {
var modalInstance = $modal.open({
templateUrl: "../application/factories/confirmDeleteDialog.htm",
controller: function($scope, $modalInstance) {
$scope.ok = function() {
$modalInstance.close("true");
};
$scope.cancel = function() {
$modalInstance.dismiss("false");
};
}
});
return modalInstance.result.then(function(response) {
return 'My other success result';
}, function(response) {
return $q.reject('My other failure reason');
});
};
return {
confirmDeleteDialog: confirmDeleteDialog
};
});
如果用户从对话框中单击了“确定”,则调用删除方法requestNotificationChannel.deleteMessage(id) 被执行。
$scope.deleteMessage = function(id) {
var result = dialogFactory.confirmDeleteDialog();
result.then(function(response) {
requestNotificationChannel.deleteMessage(id);
});
};
问题是我无法对此进行单元测试。
这是我的测试。我已经正确注入了 q 服务,但我不确定我应该从"confirmDeleteDialog" spy 返回什么...
describe("has a delete method that should call delete message notification", function() {
var deferred = $q.defer();
spyOn(dialogFactory, "confirmDeleteDialog").and.returnValue(deferred.promise);
spyOn(requestNotificationChannel, "deleteMessage");
$scope.deleteMessage(5);
deferred.resolve();
it("delete message notification is called", function() {
expect(requestNotificationChannel.deleteMessage).toHaveBeenCalled();
});
});
但我收到了expected spy deleteMessage to have been called。这意味着 result.then... 部分未执行。我错过了什么?
【问题讨论】: