การทดสอบหน่วย - วิธีจำลองความล้มเหลวของบริการจำลองใน Karma?
ฟังก์ชัน Observable ใน example.component.ts
public name: string;
this._cm.getData().subscribe(
response => {
this.name = response.name;
},
error => {
this.name = undefined;
}
บริการจำลอง
public _cm = {
data: {
name: 'test'
}
getData(): Observable<any> {
return Observable.of(this.data);
}
}
ทดสอบฟังก์ชัน observable ใน example.component.spec.ts
// this test work corectly
it('Should set name property to "test"', () => {
comp._cm.getData();
expect(comp.name).toBe('test');
}
it('Should set name property to undefined', () => {
comp._cm.getData();
expect(comp.name).toBe('undefined');
}
แต่ฉันไม่รู้วิธีจำลองการตอบกลับข้อผิดพลาดของ getData()
คำตอบ #1
คุณควรสร้าง Observable โดยใช้ Observable.create ด้วยวิธีนี้ คุณสามารถควบคุมได้ว่าเมื่อใดควรปล่อยข้อผิดพลาด ตัวอย่างเช่น
public _cm = {
error: false,
data: {
name: 'test'
},
getData(): Observable<any> {
return Observable.create(observer => {
if (this.error) {
observer.error(new Error("Boo"));
} else {
observer.next(this.data);
}
observer.complete();
})
}
}
ตอนนี้คุณสามารถควบคุมความผิดพลาดในการทดสอบของคุณได้แล้ว
_cm.error = true;
// do test
ดูเพิ่มเติม:
- Angular 2 - การทดสอบกรณีข้อผิดพลาดด้วย observables ในบริการ
