私は約束を返すサービスメソッドをテストしています。私はそれがエラーをキャッチし、エラー報告サービスを呼び出し、エラーを再伝えることを確認したい。このエラーハンドラはコールバックだったので、Ember.run
にキャッチコードを実行する必要があると思いましたが、Ember 2.3からEmber 2.13にアップグレードした後でテストが失敗してしまいました。 Ember.runを削除するとテストが修正されますが、ガイドでは推奨しない自動実行ループを使用すると想定しています。私は間違って何をしていますか?Ember; Ember.runでコードをラップするキャッチされた例外の動作をテストする方法
service.js
// .... service boilerplate
doAsyncThing() {
return get(this, 'someService').postV2Request().catch((e) => {
// tests fail unless I remove Ember.run
Ember.run(() => {
let logError = new Error('foobar error');
this.reportError(logError);
throw(e);
});
});
}
// ... service boilerplate
test.js
test('doAsyncThing reports an error if there is one', function(assert) {
assert.expect(3);
let done = assert.async();
let deferred = RSVP.defer();
let apiService = mock({
postV2Request: sinon.stub().returns(deferred.promise)
});
let reportErrorStub = sinon.stub();
let service = this.subject({
apiService,
reportError: reportErrorStub
});
service.doAsyncThing('foo', 'bar', 'baz').catch(() => {
assert.ok(true, 'The exception is rethrown');
assert.ok(reportErrorStub.called, 'reportError was called');
assert.equal(reportErrorStub.args[0][0].message, 'foobar error', 'format of message is ok');
done();
});
deferred.reject();
});