を投げていない私は、この機能を持っている:ジャスミン:どのように約束ハンドラを期待する例外
reload() {
myService.queryData()
.done(...)
.always(() => throw "fake exception"); //just to simulate the failure
}
私は私のテストリロード機能をしたいと、それは例外もコールバックがない約束をスローしないようにしてください。
describe("reload", function() {
it("does not throw exception", function (done) {
spyOn(myService, "queryData").and.callFake(() => {
let deffered = $.deffered();
setTimeOut(() => deffered.reject(), 0)
return deffered.promise();
});
reload();
setTimeout(() => {
//this is evaluated after the exception has been thrown, but
//how to check whether exception has been thrown
}, 2);
});
});
編集:私は、関数の戻り値の型がすでに定義されているいくつかのケースで約束、例えば、コンポーネントのライフサイクルイベントを返すことができない場合があります。
MyComponent extends React.Component {
componentDidMount() {
this.load(
galleryService.nodes().then(galleryResult => this.setState({ nodes: galleryResult.nodes }))
);
this.load(
galleryService.caches().then(cachesResult => this.setState({ caches: cachesResult.caches }))
);
}
}
var myComponent = React.createElement(MyComponent);
TestUtils.renderIntoDocument(myComponent); //this triggers the componentDidMount event and I need to make sure it won't throw error.
あなたはあなたの編集スニペットの流れを調整するために、 'Promise.all'または' Promise.race'を使用することはできませんか? – MarcoL
私はできましたが、componentDidMountはvoidを返す関数としてフレームワーク(REACT)によって定義されており、直接呼び出すことはありません。 'TestUtils.renderIntoDocument(...)'を実行すると、フレームワークによって呼び出されます。私はバニラのjavascriptに問題を分けることができると期待していましたが、私は問題を正しく定式化できませんでした... – Liero
'promise.all'を返すことはできません。なぜなら、' configDidMount関連するコードを 'componentDidMount'から呼び出す別のテスト可能な関数に分解します。 –