เทส observable at Typescript

การ mock observable value return เพื่อเทสฟังก์ชั่น ของ typescript ด้วย jasmine library จากตัวอย่าง จะมี class Presenter ที่มีการกระบวนการทำงาน และ interface View เอาไว้เป็นตัวเชื่อมระหว่าง presenter และ component ใน angularJS

import { Observable } from “rxjs”;

export class OtpPresenter {

subrnumb = ‘’
codeOtp = ‘’
message = ‘’
view: View

constructor(view) {
 this.view = view
}

confirm() {
 this.view.verifyOTP()
 this.view.gotoRewardPage()
}

sendOTP(){
 let self = this
 if(this.isSubscriberValid()){
 this.message = ‘’
 let r = this.view.requestOTP()
 r.subscribe({
error(err){self.showError()}
})}else this.message = ‘Your number is invalid’
}

isSubscriberValid(): boolean {
 return this.subrnumb.length == 10
}

showData(data: any) {
 console.log(“request otp sucess\n”)
}

showError(){
 this.message = ‘System fail please try again later.’
}
}

export interface View {
 requestOTP():Observable<Object>
 verifyOTP()
 gotoRewardPage()
}

=======================

import { fakeAsync, flush } 
from “@angular/core/testing”
import { throwError, of } from “rxjs”

describe(“OtpPresenter”, () => {
describe(“when click confirm success”, () => {
describe(“Request OTP success”, () => {
 let view: View
beforeEach(() => {
 view = jasmine.createSpyObj(“View”, []);
 view.requestOTP = 
 jasmine.createSpy().and.returnValues(of({“status”:’success’}));
});

})
})

describe(“Request OTP fail”, () => {

let presenter: OtpPresenter
let view: View

beforeEach(() => {
view = jasmine.createSpyObj(“View”, [])
view.requestOTP = jasmine.createSpy().and.returnValues(throwError(“Error”))
presenter = new OtpPresenter(view)
})

it(“should show error message when call request otp fail”, () => {
presenter.subrnumb = “0848333333”
presenter.sendOTP()
expect(presenter.message).toEqual(“System fail please try again later.”)
})
})

})

คำอธิบาย
1. jasmine.createSpyObj(Type, [function name]) คือการ mock object ตาม type
2. jasmine.createSpy().and.returnValues คือการ mock function และ return ค่าที่ต้องการ
3. throwError(“Error”) คือ class การจัดการ error ของการ call http ผ่าน observable ซึ่งเราสมมติว่าการเรียก api เส้นนี้เกิดการ fail ก็เลย ประกาศการ object throwError ขึ้นมา เพื่อให้เกิด error ขึ้น

Image result for angular rxjs testing