angular - 错误:: fromEvent 未声明为可写或没有设置器
问题描述
旧代码使用 rxjs v5.5.12,我们将相同的代码复制到使用 rxjs v6.4.0 的新项目中。当我们尝试运行测试用例时,我们得到了这个错误。
旧代码:
import * as ObservableEvents from 'rxjs/Observable/fromEvent';
spyOn(ObservableEvents, 'fromEvent').and.returnValue(new Subject<any>().asObservable());
新代码:
import * as rxjs from 'rxjs';
spyOn(rxjs, 'fromEvent').and.returnValue(new Subject<any>().asObservable());
在这两种情况下,我们都会收到此错误:
错误: : fromEvent 未声明为可写或没有设置器
我们找不到解决此问题的有效资源。
更新#1
我们尝试使用
import * as rxjs from 'rxjs';
spyOn(jasmine.createSpyObj(rxjs), 'fromEvent').and.returnValue(new Subject<any>().asObservable());
但这一次,我们得到了
createSpyObj 需要一个非空数组或方法名称对象来创建用于抛出的间谍
更新#2:
我们使用了来自@Omair-Nabiel 的代码,现在出现了一个新错误
TypeError: Object(...) is not a function
at XxxPopoverDirective.fromEvent [as createPopover] (http://xxx:xxxx/src/app/shared/xxx/xxx.directive.ts?:113:37)
at XxxPopoverDirective.createPopover [as mouseClick] (http://xxx:xxxx/src/app/shared/xxx/xxx.directive.ts?:70:14)
at runTest (http://xxx:xxxx/src/app/shared/xxx/xxx.directive.spec.ts?:181:19)
xxx.directive.ts
line 113-> this.componentRef && this.componentRef.destroy();
this.componentRef = null;
line 70-> constructor(
...
private resolver: ComponentFactoryResolver,
...
) { }
更新#3
嗨 Omair Nabiel,请找到我们正在使用的以下代码,请告诉我解决方案,
file="popover.directive.ts" 代码:
import { fromEvent } from 'rxjs/Observable/fromEvent';
this.clickOutSub = fromEvent(this.documentRef.getDocument(), 'click').subscribe(this.clickOut.bind(this));
file="popover.directive.spec.ts"
Code:
import * as ObservableEvents from 'rxjs/Observable/fromEvent';
function runTest() {
spyOn(ObservableEvents, 'fromEvent').and.returnValue(new Subject<any>().asObservable());
}
it('...', () => {
expect(ObservableEvents.fromEvent).toHaveBeenCalled();
});
解决方案
您需要监视 rxjs 的属性。使用 spyOnProperty 将解决该错误。尝试这个
import * as rxjs from 'rxjs'
import { of, fromEvent } from 'rxjs';
spyOnProperty(rxjs, 'fromEvent').and.returnValue(of({}))
你也可以像这样添加到 getter/setter
spyOnProperty(rxjs, 'fromEvent', 'get').and.returnValue(false)
希望这可以帮助
推荐阅读
- typescript - 类型 'string' 不可分配给类型 '"" | "," | " " | “。”
- actions-on-google - Actions Builder webhookResponse List Response 出现意外的内部错误
- html - 如何解决角度中的html标签错误?
- android - 如何在 android R 设备中创建 TelephonyDisplayInfo 对象
- pyspark - pyspark 滚动窗口时间范围
- blockchain - 实际的区块链状态数据存储在哪里:内存、文件还是数据库?
- c# - 使用 Kerberos 通过 IP 访问远程计算机上的资源失败(NTLM 被阻止)
- xml - 如果在 XSLT 中满足日期比较测试表达式,则在输出 xml 中显示错误消息
- python - 如何有效地将 Array 转换为具有 datetime ohlcv 的 pandas 数据帧,还将列值除以 100?
- ios - iOS 13 中使用 Quickblox 和 CallKit 的来电视频通话问题