2017-05-05 3 views
0

私は約束を返すサービスメソッドをテストしています。私はそれがエラーをキャッチし、エラー報告サービスを呼び出し、エラーを再伝えることを確認したい。このエラーハンドラはコールバックだったので、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(); 
}); 

答えて

0

結局のところ、実行するために、私の余分な呼び出しは、おそらく、スケジュールなっていたので、コールバックが自動的に、エンバーによって実行ループに包まれている約束後で。詳細はhttps://github.com/emberjs/ember.js/issues/11469であるが、TLDRはEmber.runであり、Emberのテストモードに関する詳細が原因で例外が検出されなかったとEmberは判断した。

関連する問題