【发布时间】:2018-05-28 06:19:45
【问题描述】:
我正在尝试使用 Jasmine 监视 RxJS 运算符。在我的测试中有不同的用例,我希望控制 Observable 返回的内容。为了说明我想要做什么,我创建了上面的示例,甚至认为它没有多大意义,因为这个 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))
【问题讨论】:
-
您有没有偶然找到解决方案?
-
我也面临同样的问题。有人找到解决方案了吗?
标签: javascript jasmine rxjs rxjs5