【问题标题】:Jasmine spy on RxJS 5.5 operatorsJasmine 监视 RxJS 5.5 运算符
【发布时间】: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


【解决方案1】:

在您的规范文件中,所有内容都作为通配符(不要担心摇树,这只是为了测试)

import * as rxjs from 'rxjs';

然后您可以使用 rxjs 进行间谍活动

spyOn(rxjs, 'switchMap').and.returnValue(rxjs.of(message))

【讨论】:

  • 当我使用 zip 函数尝试这种方法时,我在执行测试期间收到此错误:Error: &lt;spyOn&gt; : zip is not declared writable or has no setter Usage: spyOn(&lt;object&gt;, &lt;methodName&gt;)。也许这种方法不适用于所有运营商?
  • @risingTide 至少在最新版本中,你应该使用 spyOnProperty...spyOnProperty(rxjs, 'switchMap', 'get').and.returnValue...
  • 现在我收到Error: &lt;spyOnProperty&gt; : switchMap is not declared configurable :-( 有什么想法吗?
  • 在过去的几天里,我已经对此进行了大量研究,并且在 Jasmine 中似乎不支持所有配置都支持监视不属于对象实例的函数(全局函数)。它可能与使用 Webpack 或其他导致问题的转译器更密切相关。无论如何,有很多建议的解决方案,但我还没有找到一个适用于 Angular 12 环境的解决方案。
猜你喜欢
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-16
  • 2017-04-28
  • 2020-11-16
  • 1970-01-01
  • 2013-01-09
相关资源
最近更新 更多