gpt4 book ai didi

angular - 单元测试项目从 Observable 中过滤掉(Jasmine/RxJS)

转载 作者:行者123 更新时间:2023-12-02 10:38:16 25 4
gpt4 key购买 nike

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

例如,如果我有一项服务可以吸引特定年龄以上的人,那么它

  1. 应返回超过最低年龄的人员(阳性案例)
  2. 不应返回低于最低年龄的人员(负面情况)

这是我正在努力测试的第二个。

服务:

    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 永远不会返回任何内容,这是正确的。但是,我如何编写单元测试来确认这一点?

最佳答案

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

积极:

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

否定:

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

关于angular - 单元测试项目从 Observable 中过滤掉(Jasmine/RxJS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48389737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com