Iは2つのクラス、およびMyServiceでFooComponentを有する:TypeScript/JavaScriptコードのユニットテストで、内部サブスクライブイベントが発生するのを待つ方法を教えてください。
class MyService {
getStuff(): Observable<Any>() {
//Implementation that may take sometime to return
}
}
class FooComponent {
private myServiceSubscription: Subscription;
public FooModel : MyDateType;
constructor(private myService: MyService){
this.FooModel = null;
this.myServiceSubscription = null;
}
Init() {
this.myServiceSubscription = this.myService.getStuff().subscribe(response => {
//Construct this.FooModel from response;
}
}
Done() {
if (this.myServiceSubscription !== null) {
myServiceSubscription.unsubscribe();
}
}
}
FooComponentはMyServiceでのインスタンスを取得し、その初期化方法でgetStuffメソッドを呼び出します。 RxJsモジュールを使用するサブスクリプション呼び出しに注意してください。これは、Subscribeイベントが発生する前にInitメソッドが返されることを意味します。このコードに基づいて、私は(ジャスミンのフレームワークを使用して)ユニットテストを以下している:イベントはFooComponentのinitメソッドで焼成され、したがって、FooComponentインスタンスFooModelではないサブスクライブするまでテストが待たれていないため
describe('Component: Foo',() => {
it('Load Foo Model', (() => {
var myService = new MyService();
var instance = new FooComponent(myService);
instance.Init();
if (instance.FooModel == null)
{
fail("FooModel is null even after calling Init() method.");
}
}));
});
このテストは常に失敗します人口が多い。
サブスクライブイベントが発生するのをテストがどのようにしてFooModelに値が設定されるかを確認するにはどうすればよいですか?
私はhttp://sinonjs.org/releases/v2.3.4/stubs/を見てみてください。 – Jin
MyServiceの模擬は問題ではありません。問題は、内部購読イベントが外部世界に発せられたことを知らせる方法です。 – Raghu