適用されます。
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を約束しますmochaとうまく動作しません私は.then
の約束を強制的に実行するように$timeout.flush()
を追加すると言われているthis answerに従っています。
問題は().flushを呼び出した後、ある、すべての私のアプリは起動し、私は角-モックからこのエラーを取得するために開始します。
Error: Unexpected request: GET /partials/page/view/index
。
私は約$ httpBackendを知っていますが、という狂った私のアプリが起動時に行っているすべてのリクエストを模擬するでしょう。
$timeout.flush()
または$rootScope.$apply()
を呼び出すことなく$q
約束はモカと連携させるための方法はありますか?
問題の対象は、モカではなくチャイです。可能性のある複製http://stackoverflow.com/a/37374041/3731501 – estus
質問の主題は$ qサービスであり、どのようにしてapply/flushを使わずに$ q約束を解決することができます。チャイはそれとは関係ないので、私はチャイを約束どおりに使っていないからです。少なくとも、これは私が状況を見る方法です、あなたが同意しないなら、それをより良く説明しようとしてください。 – pietrovismara
モカではなくアサーションをするのはチャイです。さて、あなたはchai-as-promisedの使用を検討するかもしれません。それは、 'then apply'の後に' $ apply() 'や' $ digest() 'を呼び出さずに$ q約束のアサーションを行う方法です。 – estus