Я пытаюсь выполнить проверку разрешения/отклонения внешних обещаний.Внешние обещания никогда не заканчиваются в модульных тестах с помощью ngMock
Проблема заключается в том, что эти обещания никогда не заканчиваются при вводе ngMock
модуля, что является обязательным, поскольку я запускаю HTTP-запросы и таймауты.
Возьмем, к примеру, angular-pouchdb, что является зависимостью моего проекта. Начиная с версии 2.0.0, поскольку PouchDB promises are used, тесты больше не заканчиваются , когда вводится ngMock.
Пример кода, адаптировано из angular-pouchdb tests:
var scope;
beforeEach(function() {
var $injector = angular.injector(['ng', 'ngMock', 'pouchdb']);
var pouchDB = $injector.get('pouchDB');
scope = $injector.get('$rootScope');
db = pouchDB('db');
});
it('should wrap destroy', function(done) {
db.destroy()
.then(shouldBeOK)
.catch(shouldNotBeCalled)
.finally(done);
// No matter what's used ($apply, $applySync, $timeout.flush, etc) -- the tests will never finish.
scope.$apply();
});
Бревно для приведенного выше теста заключается в следующем:
C:\Users\Gustavo\Projetos\main\angular-pouchdb (master)
λ karma start
INFO [karma]: Karma v0.12.37 server started at http://localhost:9876/
INFO [launcher]: Starting browser PhantomJS
INFO [PhantomJS 1.9.8 (Windows 8 0.0.0)]: Connected on socket s1A7jIzmtcOxkGCtzYke with id 42899233
PhantomJS 1.9.8 (Windows 8 0.0.0) Angular-aware PouchDB public API should wrap destroy FAILED
Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.
Итак, мой вопрос сводится к: там что-то я отсутствует при модульном тестировании Угловое? Или это внутренняя ошибка в ngMock?
This issue has been created in the angular-pouchdb repository as well.
'Ошибка: Нет отложенных заданий, чтобы быть flushed' - кроме того, я могу воспроизвести ту же проблему, используя мокко. – gustavohenke
Возможно, для ваших целей тестирования вам просто нужно проверить, что ничего не нужно называть как $ timeout.verifyNoPendingTasks() – James
Также вы проверяете это в Chrome или PhantomJS, потому что это может иметь значение. – James