Angularjs 如何测试角度2的可观测性

Angularjs 如何测试角度2的可观测性,angularjs,unit-testing,rxjs,angular2-observables,Angularjs,Unit Testing,Rxjs,Angular2 Observables,设置了我的测试套件,但不知道如何测试依赖第三方模块从服务器上获取文件名的可观察对象 如何模拟一个可观察对象,以便测试我的openConnection()方法?我不想直接用间谍替换它,只需模拟一个可观察对象即可 ssh.service.ts openConnection():可观察{ this.Client=this.ssh.getClient(); 返回可观察的。创建((obs:Observer)=>{ 让remotePathToList='/home'; var conn=this.Clien

设置了我的测试套件,但不知道如何测试依赖第三方模块从服务器上获取文件名的可观察对象

如何模拟一个可观察对象,以便测试我的
openConnection()
方法?
我不想直接用间谍替换它,只需模拟一个可观察对象即可

ssh.service.ts

openConnection():可观察{
this.Client=this.ssh.getClient();
返回可观察的。创建((obs:Observer)=>{
让remotePathToList='/home';
var conn=this.Client;
this.Client.on('ready',()=>{
conn.sftp((错误:任意,sftp:任意)=>{
如果(错误)抛出错误;
sftp.readdir(remotePathToList,(err:any,list:any)=>{
连接端();
obs.next(列表);
//obs.complete();//必需,否则您的订阅将永远不会关闭
})
})
}).connect(此.connect设置);
});
}
ssh.spec.ts

description('SSH服务',()=>{
let主题:sshs服务;
在每个之前(()=>{
TestBed.configureTestingModule({
供应商:[
SSH服务
]
});
});
每次之前(注入([SshService],(SshService:SshService)=>{
主题=sshs服务;
}));
它('应该模拟一个可观察的',()=>{
var res=可观察。创建((obs:Observer)=>{
obs.next(“你好”);
});
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 }
        ]
    });
});

你想模拟一个可观察的,还是测试它?让它像那样打开连接不是很容易的单元测试。你是说你希望返回的可观察值等于
res
,并且你试图创建一个与你期望的匹配的
res
?我知道让它打开连接也不是很容易的单元测试,我想“我只是想让所有的组件都工作起来&然后我可以回去创建一个getData()方法,由observable调用。基本上,我只是想弄清楚如何用一些伪数据解析测试中可以观察到的openConnection(),并测试openConnection()返回的伪数据。
    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);
    });
});
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 }
        ]
    });
});