[英]How to test observable in angular 2
有我的測試套件設置,但無法弄清楚如何測試依賴於第三方模塊的可觀察對象從服務器獲取文件名。
如何模擬可觀察對象,以便測試我的openConnection()
方法? 我不想直接用間諜代替它,只是嘲笑一個可觀察到的東西。
ssh.service.ts
openConnection(): Observable<any> {
this.Client = this.ssh.getClient();
return Observable.create((obs: Observer<string>) => {
let remotePathToList = '/home';
var conn = this.Client;
this.Client.on('ready', ()=>{
conn.sftp((err:any, sftp:any)=>{
if (err) throw err;
sftp.readdir(remotePathToList, (err:any, list:any)=>{
conn.end();
obs.next(list);
//obs.complete(); // required, otherwise your subscription would never close
})
})
}).connect(this.connSettings);
});
}
ssh.spec.ts
describe('SSH service', () => {
let subject: SshService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
SshService
]
});
});
beforeEach(inject([SshService], (sshService: SshService) => {
subject = sshService;
}));
it('should mock an observable', () => {
var res = Observable.create((obs: Observer<string>) => {
obs.next('hello');
});
expect(subject.openConnection()).toEqual(res);
});
});
嘗試此操作,它應該可以從SSH服務為您“偽造”一個已解決的可觀察對象。
describe('SSH service', () => {
let fakeData = "Fake Data I want to return"
let fakeSSHService = {
openConnection: () => Observable.of(fakeData)
}
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
{ provide: SshService, useValue: fakeSSHService }
]
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.