本文介绍了单元测试,将项目从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
- 应返回最低年龄的人(阳性病例)
- 不应遣返未满最低年龄的人(否定情况)
正在努力测试的是第二名.
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)中过滤掉的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!