unit-testing - 如何在karma中模拟模拟服务失败?

标签 unit-testing testing angular typescript karma-runner

example.component.ts 中的 Obeservable 函数

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 中测试可观察函数

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

最佳答案

您应该使用 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

另请参阅:

关于unit-testing - 如何在karma中模拟模拟服务失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40654271/

相关文章:

java - 从本地内部类模拟访问外部对象

unit-testing - web开发有必要写单元测试吗?

java - 使用 Maven 跳过 Jhipster 中的 Java 测试进行构建

node.js - 使用 Nodemailer 和 Webpack 时无法解析 dns 和 child_process

angular - 如何将同一个对象的属性传递给 Angular 中的函数?

c# - 数据驱动测试的类/模式感知测试数据生成策略

Java 使用 Mockito 验证 void 方法调用 n 次

python - Setuptools - 当测试不在主目录中时如何运行 unittest 测试套件?

ruby-on-rails - rails 引擎 : Where to define gems only used in testing

angular - 如何将泛型类型参数传递给 Angular2 组件?