У меня есть эта услуга:
angular.module('domeeApp')
.factory('streamWidget', streamWidgetFactory);
function streamWidgetFactory($q) {
return {
loadContent: function() {
return $q(function(resolve, reject) {
resolve('test');
})
}
}
}
Я тестирую это с помощью karma/mocha/chai:
describe('streamWidget', function() {
beforeEach(module('domeeApp'));
var streamWidget;
var $timeout;
beforeEach(inject(function(_$timeout_, _streamWidget_) {
streamWidget = _streamWidget_;
$timeout = _$timeout_;
}));
it('should load new content', function(done) {
streamWidget.loadContent()
.then(function(res) {
expect(res).to.equal('test');
done();
})
.catch(function(){})
$timeout.flush();
});
});
Поскольку обещания $q плохо работают с мокко, я следую этому ответу, в котором говорится, что нужно добавить $timeout.flush()
, чтобы заставить .then
метод выполнения обещания.
Проблема в том, что после вызова .flush() все мое приложение просыпается, и я начинаю получать эти ошибки от angular-mocks:
Error: Unexpected request: GET /partials/page/view/index
.
Я знаю о $httpBackend, но было бы безумно имитировать ВСЕ запросы, которые мое приложение делает при запуске.
Есть ли способ заставить $q
promises работать с мокко без вызова $timeout.flush()
или $rootScope.$apply()
?
$apply()
или$digest()
послеthen
. - person Estus Flask   schedule 29.07.2016chai-as-promised
требует дополнительной настройки, как следует из приведенной выше ссылки. К счастью, у него есть хукtransferPromiseness
, обеспечивающий желаемое поведение для утвержденного промиса (т. е. запуск дайджеста для выполнения всей цепочки промисов). - person Estus Flask   schedule 29.07.2016