2
私はAngularアプリの単体テストを書いており、スパイの使い方を学んでいます。CreateSpyObjを使ってクラス内のすべてのメソッドのスパイを作成する方法はありますか?
現在、私のコンポーネントが使用するすべてのサービスは、私は、これは動作しますが、それは私のスパイを設定する最良の方法のように見えるしていません。この
let fakeMyService = jasmine.createSpyObj('fakeMyService', ['method1', 'method2']);
fakeMyService.method1.and.returnValue(Observable.of());
fakeMyService.method2.and.returnValue(Observable.of());
TestBed.configureTestingModule({
declarations: [MyComponent],
providers: [
{ provide: MyService, useValue: fakeMyService }
]
}).compileComponents();
のようなものを記述する必要があります。 1つは、私がスパイを入れたいMyServiceのすべての関数を入力する必要があります。次に、強く型付けされていない関数です。だから私が名前を変更した場合、私はすぐには知りませんし、また、私はすべての場所でそれを更新する必要があります。
クラスを指定するだけの方法がありますか?それは自動的にすべてのメソッドのスパイで私に偽のクラスを返しますか?
ので、代わりにあなたができるだけSpyOn(サービス、メソッド)この
let fakeMyService = jasmine.createSpyObj<MyService>();
内のすべてのメソッドをテストするのがベストでしょうか?それから私はまだすべてのメソッドのためのスパインを持っている必要がありますし、もう一度私は強く型付けされていないように文字列としてメソッドを入れています。 – Diskdrive
質問のようにSpyObjectのすべてのメソッドを持っていないと、実際にテストするメソッドを入力するだけで、エラーを引き起こさずに済むようになります。 –