【问题标题】:How to simulate the failure of mock service in karma?如何在 karma 中模拟 mock 服务的失败?
【发布时间】:2017-03-31 22:59:50
【问题描述】:

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

在 example.component.spec.ts 中测试 observable 函数

// 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()

【问题讨论】:

    标签: unit-testing testing angular typescript karma-runner


    【解决方案1】:

    您应该只使用Observable.create 创建Observable。有了这个,您可以控制何时应该发出错误。例如

    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
    

    另请参阅:

    【讨论】:

    • 方法有效,但我不得不改变:observer.onError 到observer.errorobserver.onNext 到observer.next observer.onComplete 到observer.complete
    猜你喜欢
    • 2014-12-12
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2015-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多