通常の$ q約束を返すサービスをテストしようとすると、私は奇妙なことに遭遇しました。どんなテストでも試してみる約束は実際に解決/拒否されています(具体的にはthen
からのハンドラは呼び出されず、約束内のコードは正常に実行されます)。私はルートスコープでダイジェストを強制しようとしましたが、何か別の答えが示唆されていたので、運が無かったのです。ここでユニットテストの凍結約束
は小さな自己完結型の例である:
describe('promise', function(){
jasmine.DEFAULT_TIMEOUT_INTERVAL = 500;
let q;
beforeEach(inject(function($q){
q = $q;
}));
it('finishes', function(done){
expect(q).toBeDefined();
const promise = q.resolve();
console.log(promise);
promise.then(
() => done(),
() => done.fail()
);
});
});
は私が期待通りに約束の仕事を得るために行うためには何がありますか?
$ q約束は同期的で、 'done'を呼び出す必要はありません。 promiseチェーンが確立された後の '$ rootScope。$ digest()' *。新しい 'then'は、別のダイジェストをトリガする必要があります。 – estus
ありがとう、あなたは大丈夫です(エスタス、Radek Wyroslakとdoge1ord)。私は、$ q約束が同期しており、働くためにダイジェストを必要としているということを知らなかった。 – monnef