Как издеваться над сервисом, возвращающим обещание в angularjs с помощью обратных вызовов done () и catch () - PullRequest
1 голос
/ 01 мая 2019

Я хочу смоделировать службу для модульного теста в angularjs, которая выглядит примерно так:

 TranslationService.translate(args)
                                    .then(function translated(value) {
                                        //somecode
                                        return;
                                    })
                                    .catch()
                                    .done();

После этого ответа: Как мне сменить службу, которая возвращает обещание в модульном тесте Angularjs Jasmine?

Это то, что я сделал, чтобы высмеивать это:

    TranslateServiceMock = {
        translate: jasmine.createSpy('translate').and.callFake(function() {
            var deferred = $q.defer();
            deferred.resolve('Remote call result');
            return deferred.promise;
    })};

Но похоже, что это все еще не работает, я предполагаю, что это из-за цепочки «сделано» и'catch'methods,

Это ошибка, которую я получаю:

TypeError: undefined is not a constructor (near '....done();...'

Не хватает идей, почему это может происходить или как это исправить ..

1 Ответ

0 голосов
/ 02 мая 2019

Как уже упоминалось в комментариях, done не является частью объекта обещания.

Я получил эту работу, заглушив готовый обратный вызов:

beforeEach(  function () {
    module(myModule.name, function ($provide) {
        // define a .done on the $q Promise
        $provide.decorator('$q', function ($delegate) {
            var Promise = $delegate.when().constructor;
            Promise.prototype.done = angular.noop;
            return $delegate;
        });

        $provide.factory('TranslationService', function ($q) {
            var svc = jasmine.createSpyObj('TranslationService', ['translate']);

            svc.translate.and.returnValue($q.when(''));

            return svc;
        });
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...