我有這樣的服務:
angular.module('domeeApp')
.factory('streamWidget', streamWidgetFactory);
function streamWidgetFactory($q) {
return {
loadContent: function() {
return $q(function(resolve, reject) {
resolve('test');
})
}
}
}
我果報/摩卡/柴測試它:
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承諾不符合摩卡我很喜歡this answer,這表示要添加$timeout.flush()
來強制.then
承諾的方法被執行。
的問題是,調用.flush()之後,我的所有應用被喚醒,我開始從角嘲笑得到這個錯誤:
Error: Unexpected request: GET /partials/page/view/index
。
我知道約$ httpBackend,但它會是瘋狂嘲笑我的應用程序啓動時的所有請求。
有沒有辦法使$q
承諾與摩卡一起工作,而無需致電$timeout.flush()
或$rootScope.$apply()
?
問題的主題是柴,而不是摩卡。可能的重複http://stackoverflow.com/a/37374041/3731501 – estus
問題的主題是$ q服務,以及我如何強制$ q promise在不使用apply/flush的情況下解決。柴沒有任何關係,因爲我沒有使用chai-as-promise。至少,這是我看到的情況,如果你不同意,試着更好地解釋它。 – pietrovismara
這是柴,斷言,而不是摩卡。那麼,你可以考慮使用chai-as-promised,那麼$'promise可以在'then'後面調用'apply()'或'$ digest()'來完成斷言。 – estus