从 Observable 中过滤掉项目的单元测试 (Jasmine/RxJS) [英] Unit testing that items get filtered out of Observable (Jasmine/RxJS)

查看:9
本文介绍了从 Observable 中过滤掉项目的单元测试 (Jasmine/RxJS)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 Jasmine/Karma 对 Angular 服务进行单元测试.我想确认我的服务正确过滤了项目.

I'm doing unit testing with Jasmine/Karma against an Angular service. I'd like to confirm that my service properly filters items.

例如,如果我有一项服务可以让超过一定年龄的人,它

For example, if I have a service to get people over a certain age, it

  1. 应该返回超过最低年龄的人(正面案例)
  2. 不应退回未满最低年龄的人(否定情况)

这是我正在努力测试的 #2.

It's #2 that I'm struggling to test.

服务:

    getPeople(minAge: number): Observable<string> {
        const source = Observable.from([
            { name: 'Joe', age: 30 },
            { name: 'Frank', age: 20 },
            { name: 'Ryan', age: 50 }
        ]);
        return source
            .filter(person => person.age >= minAge)
            .map(person => person.name);
    }

正面单元测试

    it('should return people over 30', () => {
        const service = new MyService();
        const minAge = 30;
        service.getPeople(minAge).subscribe(people => {
            expect(people.length).toBeGreaterThan(0);
        });
    });

还有负单元测试

it('should not return people over 55', () => {
        const service = new MyService();
        const minAge = 55;
        service.getPeople(minAge).subscribe(people => {
            expect(people.length).toBe(0); // WE NEVER GET HERE!
        });
    });

在否定的情况下,Observable 永远不会返回任何东西,这是正确的.但是,如何编写单元测试来确认这一点?

In the negative case, the Observable never returns anything, and rightly so. But, how do I write a unit test to confirm this?

推荐答案

你的 observable 是一个值流,你可以这样做:

Your observable is a stream of values, you may do something like:

正面:

let invoked = 0;
service.getPerson(30).subscribe(() => {
   invoked++;
})
expect(invoked).toEqual(2);

否定:

let invoked = 0;
service.getPerson(55).subscribe(() => {
   invoked++;
})
expect(invoked).toEqual(0);

这篇关于从 Observable 中过滤掉项目的单元测试 (Jasmine/RxJS)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆