Сервис модульных тестов, который возвращает обещание Angularjs Jasmine

Отредактировано по посту Михала Чарамзы.

У меня есть сервис, который представляет 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
    };

});

При вызове метода удаления, если пользователь нажал Ok в диалоговом окнеrequestNotificationChannel.deleteMessage(id) выполнен.

$scope.deleteMessage = function(id) {
        var result = dialogFactory.confirmDeleteDialog();

        result.then(function(response) {
            requestNotificationChannel.deleteMessage(id);
        });
    };

Проблема в том, что я не могу выполнить это.

Это мой тест. Я правильно ввел службу q, но я не уверен, что я должен вернуться с"confirmDeleteDialog" шпион ...

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... часть не выполнена. Что мне не хватает?

Ответы на вопрос(1)

Ваш ответ на вопрос