AngularJS, Karma: Невозможно получить обещание разрешить работу для оболочки indexedDB - PullRequest
0 голосов
/ 22 декабря 2018

Я использую localforage и у меня есть оболочка angularjs, чтобы получить предмет и дать объект обещания

Factory.js

service.prototype.getItem = function getItem(key) {
   var deferred = $q.defer();
   localforage.getItem(key).then(function (item) {
     //some calculations
     deferred.resolve(item);
   }
   return deferred.promise;
}

Factory.spec.js

it('should get item', function (done) {
   mocks.inject(function ($rootScope, $httpBackend, service) {
      service.getItem('test').then(function(item) {
         expect(item).toBe('some value');
         done();
      });
      $rootScope.$digest();
   });
}

В приведенном выше коде обратный вызов службы запускается правильно и получает значение.Но не удалось вызвать обратный вызов в spec.js

1 Ответ

0 голосов
/ 22 декабря 2018

Не можете найти, где вы имеете дело с localforage?Я предполагаю, что цель теста - проверить некоторые важные вычисления, тогда, вероятно, вам следует сделать это

it('should get item', function () {
    spyOn(localforage, 'getItem').and.returnValue($q.resolve(item));

    service.getItem('test').then(function(responseAfterCalculations) {
         expect(responseAfterCalculations).toBe('some value');
    });
    $rootScope.$digest();
}

В принципе, метод localforage.getItem имеет свой собственный тест в репо.В модульном тестировании вы просто тестируете свою собственную функцию и реализацию стороннего сервиса.Так что лучший подход здесь - просто издеваться localforage.Если вам нужен более полный тест, вам нужен подход e2e, например, на основе транспортира.

...