【问题标题】:How to test observable in angular 2如何在角度 2 中测试 observable
【发布时间】:2017-02-06 16:44:47
【问题描述】:

设置了我的测试套件,但不知道如何测试一个依赖 3rd 方模块从服务器获取文件名的 observable。

如何模拟 observable 以便测试我的 openConnection() 方法?我不想直接用间谍代替它,只需模拟 observable。

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);
    });
});

【问题讨论】:

  • 你想模拟一个 observable 还是测试它?让它像那样打开连接并不是很容易进行单元测试。
  • 您是说您希望返回的 observable 等于 res,并且您正在尝试创建一个符合您期望的 res
  • 我知道让它打开一个连接也不是很单元测试,我只是想让所有组件工作然后我可以回去创建一个 getData() 方法可观察的调用。基本上我只是想弄清楚如何用一些虚拟数据在测试中解析我的 openConnection() 可观察对象,并测试 openConnection() 返回该虚拟数据。

标签: angularjs unit-testing rxjs angular2-observables


【解决方案1】:

试试这个,它应该为你从 SSH 服务“伪造”一个已解析的 observable。

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 }
        ]
    });
});

【讨论】:

    猜你喜欢
    • 2018-01-03
    • 2017-05-06
    • 2022-01-10
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2017-08-17
    • 2018-02-20
    • 2018-06-19
    相关资源
    最近更新 更多