サービスOnInitを呼び出すコンポーネントの単体テストを作成しています。応答が「成功」である場合、取られた1つのアクションと「エラー」のための別のアクション。ユニットテスト「成功」と「エラー」観測可能な応答が角度2のコンポーネント
両方のケースをテストする最良の方法は何ですか?私はコンポーネントと単体テストの簡略版を作成しました。両方のケースで簡単にテストできるもの。
私は解決策hereを実装しようとしましたが、私はその実装を中止する必要があります。私はまた、仕様やコメントに表示されるようにエラーを投げようとしました。
コンポーネント
@Component({
selector: 'app-observer-throw-unit-test',
template: '<p>{{ data }}</p>'
})
export class ObserverThrowUnitTestComponent implements OnInit {
public data: string;
constructor(private _observerThrowService: ObserverThrowService) { }
ngOnInit() {
this._observerThrowService.getData().subscribe(
(data) => {
this.data = data;
},
(error) => {
this.redirect()
}
)
}
redirect() {
this.data = "Redirecting...";
}
}
スペック
const data: string = "Lorem ipsum dolor sit amet.";
const ObserverThrowServiceStub = {
error: false,
getData() {
return Observable.create((observer) => {
if(this.error) {
observer.error(new Error());
} else {
observer.next(data);
}
observer.complete();
})
}
}
describe('ObserverThrowUnitTestComponent',() => {
let component: ObserverThrowUnitTestComponent;
let fixture: ComponentFixture<ObserverThrowUnitTestComponent>;
let _observerThrowService: ObserverThrowService;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ ObserverThrowUnitTestComponent ],
providers: [
{ provide: ObserverThrowService, useValue: ObserverThrowServiceStub },
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(ObserverThrowUnitTestComponent);
component = fixture.componentInstance;
fixture.detectChanges();
_observerThrowService = TestBed.get(ObserverThrowService);
});
it('should set "data" to "Lorem ipsum dolor sit amet." on success',() => {
expect(component.data).toEqual("Lorem ipsum dolor sit amet.");
});
it('should set "data" on "Redirecting..." on error',() => {
ObserverThrowServiceStub.error = true;
// spyOn(_observerThrowService, "getData").and.returnValue(Observable.throw("error")); // This did not work and returned : TypeError: undefined is not a constructor (evaluating 'Observable_1.Observable.throw("error")') in src/test.ts
spyOn(_observerThrowService, "getData")
expect(component.data).toEqual("Redirecting...");
});
it('should set "data" on "Redirecting..." on error',() => {
// This works after setting error to true in the previous test
spyOn(_observerThrowService, "getData")
expect(component.data).toEqual("Redirecting...");
});
});
これはまさに私が探していたものです。あなたが含まれていた方法とリンクは注目に値するものでした。ありがとうございました! – bmd