Ich habe diesen Service.
angular.module('domeeApp')
.factory('streamWidget', streamWidgetFactory);
function streamWidgetFactory($q) {
return {
loadContent: function() {
return $q(function(resolve, reject) {
resolve('test');
})
}
}
}
Ich teste es mit Karma/Mocca/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();
});
});
Da $ q Versprechen funktioniert nicht gut mit Mocha ich bin this answer, die $timeout.flush()
hinzufügen, um die .then
Methode des Versprechens zu erzwingen, ausgeführt werden.
Das Problem ist, nach dem Aufruf .flush(), alle meine app aufwacht und ich anfangen, diese Fehler von Winkel Mocks zu bekommen:
Error: Unexpected request: GET /partials/page/view/index
.
Ich weiß über $ httpBackend, aber es wäre geisteskrank, um alle Anforderungen zu verspotten, die meine App beim Start macht.
Gibt es einen Weg zu $q
Versprechungen Arbeit mit Mokka ohne Aufruf $timeout.flush()
oder ?
Das Thema der Frage ist Chai, nicht Mocha. Mögliches Duplikat von http://StackOverflow.com/a/37374041/3731501 – estus
Das Thema der Frage ist der $ Q-Service und wie ich $ Q verspricht, ohne Anwendung/flush gelöst werden. Chai als nichts damit zu tun, da ich nicht Chai-wie versprochen. Zumindest sehe ich so die Situation, wenn Sie nicht einverstanden sind, versuchen Sie es besser zu erklären. – pietrovismara
Es ist Chai, die Behauptungen macht, nicht Mocha. Nun, Sie können in Betracht ziehen, Chai-as-Versprochen zu verwenden, es ist die Art und Weise, wie $ q Zusicherungszusicherungen durchgeführt werden können, ohne '$ apply()' oder '$ digest()' nach 'then' aufzurufen. – estus