私はテストの世界で初めてで、既存のアンギュラ2コードの単体テストを書き始めました。私はconfirmDelete
の機能を持っており、Obserable<boolean>
を返し、PrimeNGの内部でConfirmationService
を使用して、ポップアップでユーザーからのフィードバックを得る。機能のユニットテスト角度オブザーバブル
定義は以下のとおりである:
confirmDelete(): Observable<boolean> {
let confirmObservable = Observable.create((observer: Observer<boolean>) => {
this.confirmationService.confirm({
header: 'Delete Confirmation',
message: 'Do you really want to delete this record?',
accept:() => {
observer.next(true);
observer.complete();
},
reject:() => {
observer.next(false);
observer.complete();
}
});
});
return confirmObservable;
}
私は、コードのこの部分のためのユニットテストを書きたいです。私はConfirmationService
のためのスタブを書くつもりだったが、私はユニットテストの世界には新しいので、セットアップが難しいと思っている。
私の質問は、この特定のシナリオで単体テストを書く正しいアプローチは何ですか。
EDIT: -
私は@peeskilletによって提案された解決策を試してみましたが、その後、私はConfirmationService
とMockConfirmationService
間の型の不一致エラーを取得し始めました。
以下は、PrimeNGライブラリにあるConfirmationService
およびConfirmation
クラスの宣言です。
export interface Confirmation {
message: string;
icon?: string;
header?: string;
accept?: Function;
reject?: Function;
acceptVisible?: boolean;
rejectVisible?: boolean;
acceptEvent?: EventEmitter<any>;
rejectEvent?: EventEmitter<any>;
}
export declare class ConfirmationService {
private requireConfirmationSource;
private acceptConfirmationSource;
requireConfirmation$: Observable<Confirmation>;
accept: Observable<Confirmation>;
confirm(confirmation: Confirmation): this;
onAccept(): void;
}
ありがとう@ peeskillet。私は上記の解決策を試みたが、いくつかのタイプの不一致エラーが発生している。上記の編集済みの記事をご覧ください。 –
私はうまくいくはずです。私はそれをテストし、それは正常に動作します。私の例を正確に見てください。 'ModalService'はコンストラクタパラメータとして' ConfirmationService'をとる単純なクラスだけです。そして、メソッド、私はあなたの投稿からstrightをコピーして貼り付けました –
TestBedを使わずにテストをしようとしている場合(テスト対象のサービスをインスタンス化し、モックをそのコンストラクタに渡す)、そのキャストする必要がありますそれを渡そうとする前に嘲笑してください。しかし、テストベッドを使用すると、型チェックはコンパイル時だけであるので、これらのことを心配する必要はありません –