TypeError: undefined не является конструктором в модульном тесте с жасмином с angularjs - PullRequest
0 голосов
/ 22 октября 2019

У меня выше ошибка в моих тестах Jesmine. У Code есть контроллер, который вызывает сервис AppsService для получения ответа на обещание массива приложений, за которым следует метод onLoad -

AppsService.initAndGetApps(appCredentialType)
        .then(onLoad)
        .catch(onError);

Код работает нормально, но получает ошибку для модульных тестов, таких как -

TypeError: undefined не является конструктором (оценивает 'AppsService.initAndGetApps (appCredentialType) .then (onLoad)')

Я пытался смоделировать initAndGetApps в моем файле спецификации с помощью Jasmine & также как пользовательский метод, подобный этому(оба дают одинаковую ошибку выше) -

1.

initAndGetApps : jasmine.createSpy("initAndGetApps").and.callFake(function (credentialType) {
    return [];  // empty is ok
}

2.

AppsService = {
    initAndGetApps: function (credentialType) {
        return []; 
    }
}

$provide.value('AppsService', AppsService);

AppsService использует deferred.promise для возврата ответа на обещание после выполнения некоторых вычислений на основе параметра credentialType (он также выполняет два вызова Promise). Test не может вызвать initAndGetApps, так как не получает консоль credentialType в первой строке initAndGetApps.

Может кто-нибудь подсказать мне правильный способ насмешки над AppsService.

1 Ответ

0 голосов
/ 22 октября 2019

Вы не возвращаете обещание ни в одном из этих двух издевательств. Я хотел бы попробовать, если что-то вроде этого:

initAndGetApps : jasmine.createSpy("initAndGetApps").and.returnValue(
  new Promise(function(resolve, reject) {
    // not taking our time to do the job
    resolve(desiredReturnValue);
  }
);

Вы можете изменить возвращаемое значение на фиктивное значение, чтобы ваш код работал.

...