Jasmine 3.3
Promiseでrejectしてエラー吐くようなパターンをテストしたい場合のお話ですが、
どうやら仕様?の様です(参照にGithubのissueのリンクあるのでよかったら見てね)
どうやらfakeAsyncの時の仕様みたい?
(完全には解決してない問題。誰か教えて!)
とりあえず下記二つは同じな様なので、適宜読み替えてください
(公式ドキュメントで見つけれてないので、違うかも)
promise.component.ts
Promise.reject('Something error occured!') ;
new Promise( function( resolve, reject ) {
reject( "Something error occured!" ) ;
} ) ;
ダメな書き方(returnValueを使う)
test.component.spec.ts
spyOn(testService, 'func').and.returnValue(Promise.reject('Something error occured!'));
良い書き方(callFakeを使う)
test.component.spec.ts
spyOn(testService, 'func').and.callFake(() => {Promise.reject('Something error occured!'); });
returnValueだとその場で評価されてしまうみたい?(どうかと思うけど)
ちなみにfakeAsyncのなかだと、下記の様にキャッチするけど、Uncaught Promise Errorになるので、微妙にモヤモヤします。(上記で飛ばした'Something error occured!'だとマッチしない)
test.component.spec.ts
expect(() => {
TestObj.func();
tick();
}).toThrow();
参考
https://github.com/jasmine/jasmine/issues/1648
https://github.com/jasmine/jasmine/issues/1590