0

如果我想测试以下代码

even: boolean;

ngOnInit(

this.myService.obs.subscribe(response: number => {

if (response % 2 === 0){ this.even = true } else {this.even = false}

});
)

对于 this.even 的值,在我使用 jasmine-marbles 的单元测试中是这样的


const responses = cold('a-b-c-', a: 3, b:4, c:5);
const expected = cold('-d-e-f', d: false, b: true, c: false);

component.ngOnInit();

expect(component.even).toEqual(expected);

显然这不起作用,因为 this.even 不是可观察的,而冷需要类型 TestColdObservable。有没有办法使用 jasmine marbles 或其他基本测试框架来测试 this.even 随着时间的变化?

4

1 回答 1

1

像这样的东西我认为可以工作,虽然我不擅长jasmine-marbles

import { map } from 'rxjs/operators';
....
even$: Observable<boolean>;

ngOnInit(
  this.even$ = this.myService.obs.pipe(map(response => response % 2 === 0));
}

/////
// assuming responses is tied to myService.obs
const responses = cold('a-b-c-', a: 3, b:4, c:5);
const expected = cold('-d-e-f', d: false, b: true, c: false);

component.ngOnInit();

expect(component.even$).toEqual(expected);

基本上,我们将我们正在比较的两件事都转换为可观察对象,您可以使用管道订阅even$HTML 中的可观察对象。async

于 2021-07-26T20:04:28.457 回答