私は、サブジェクトプロパティとそのサブジェクトの.next()を呼び出すメソッドを持つ角度サービスのテストを作成しようとしています。サービスは以下の通りです:ユニットテスト角度2のサービスサブジェクト
@Injectable()
export class SubjectService {
serviceSubjectProperty$: Subject<any> = new Subject();
callNextOnSubject(data: any) {
this.serviceSubjectProperty$.next(data);
}
}
そして、そのサービスのテストファイル:
import { TestBed, inject } from '@angular/core/testing';
import { SubjectService } from './subject.service';
describe('SubjectService',() => {
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
SubjectService
]
});
});
it('callNextOnSubject() should emit data to serviceSubjectProperty$ Subject',
inject([SubjectService], (subjectService) => {
subjectService.callNextOnSubject('test');
subjectServiceProperty$.subscribe((message) => {
expect(message).toBe('test');
})
}));
});
私は何か他のものへの「試験」からsubjectService.callNextOnSubjectの引数を変更した場合、テストは常にイベントを渡します。私もasyncとfakeAsyncですべてをラップしようとしましたが、結果は同じです。
callNextOnSubjectがserviceSubjectProperty $ Subjectにデータを送信しているかどうかをテストする正しい方法は何ですか?
メソッドを呼び出す前に*サブスクライブする必要があります。そのサブジェクトには、再生/バッファの動作がありません。 – jonrsharpe
@jonrsharpeは働いて、ありがとう。 –
_service_をユニットテストするときは、角度テストインフラストラクチャを使用すべきではありません。テストコードを長くしてエラーを起こしやすいようにするだけです。 –