本文介绍了单元测试,将项目从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. 不应遣返未满最低年龄的人(否定情况)

正在努力测试的是第二名.

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?

推荐答案

您的可观察值是值的流,您可以执行以下操作:

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)中过滤掉的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-29 18:37