我正在尝试使用 Jasmine 监视 RxJS 操作员。在我的测试中有不同的用例,我希望控制 Observable 返回的内容。为了说明我正在尝试做的事情,我创建了上面的示例,尽管我认为它没有多大意义,因为此可观察值总是返回相同的硬编码字符串。无论如何,这是一个很好的例子来展示我想要实现的目标:
想象一下我有以下课程。
import {Observable} from 'rxjs/Observable';
import {of} from 'rxjs/observable/of';
export class AwesomeTest {
constructor() {
}
getHero(): Observable<string> {
return of('Spiderman');
}
}
以及以下测试:
import {AwesomeTest} from './awesomTest';
import {of} from 'rxjs/observable/of';
import createSpyObj = jasmine.createSpyObj;
import createSpy = jasmine.createSpy;
describe('Awesome Test', () => {
let sut;
beforeEach(() => {
sut = new AwesomeTest()
})
fit('must be true', () => {
// given
const expectedHero = 'Superman'
const asserter = {
next: hero => expect(hero).toBe(expectedHero),
error: () => fail()
}
createSpy(of).and.returnValue(of('Superman'))
// when
const hero$ = sut.getHero()
// then
hero$.subscribe(asserter)
});
});
我尝试监视 Observable of 运算符,并返回一个 Observable,其值是我在测试中指定的值,而不是它返回的实际值。我怎样才能实现这个目标?
在新的 Rx 导入语法之前,我能够执行如下操作:
spyOn(Observable.prototype,'switchMap').and.returnValue(Observable.of(message))
在您的规范文件中,所有内容都作为通配符(不用担心树摇动,这仅用于测试)
import * as rxjs from 'rxjs';
然后你可以使用 rxjs 进行间谍活动
spyOn(rxjs, 'switchMap').and.returnValue(rxjs.of(message))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)