相关疑难解决方法(0)

可以将webpack 4模块配置为允许Jasmine监视其成员吗?

我一直无法使用webpack 4运行我的测试茉莉花测试套件.升级webpack后,几乎每个测试都会出现以下错误:

Error: <spyOn> : getField is not declared writable or has no setter 
Run Code Online (Sandbox Code Playgroud)

这是由于我们用于为简单函数创建spys的常见模式是:

import * as mod from 'my/module';
//...
const funcSpy = spyOn(mod, 'myFunc');
Run Code Online (Sandbox Code Playgroud)

我玩过,module.rules[].type但没有一个选项似乎可以做到这一点.

这个webpack GH问题表明ECMA模块是不可写的,对网络有意义,但实际上没有测试的解决方法吗?

相关包版本:

"jasmine-core": "2.6.4",
"typescript": "2.5.3",
"webpack": "4.1.1",
"webpack-cli": "^2.0.12",
"karma": "^0.13.22",
"karma-jasmine": "^1.1.0",
"karma-webpack": "^2.0.13",
Run Code Online (Sandbox Code Playgroud)

jasmine typescript karma-jasmine webpack webpack-4

15
推荐指数
2
解决办法
2387
查看次数

错误:&lt;spyOn&gt;:fromEvent未声明为可写或没有setter

旧代码使用rxjs v5.5.12,我们将相同的代码复制到了使用rxjs v6.4.0的新项目中。当我们尝试运行测试用例时,我们得到了这个错误。

旧代码:

import * as ObservableEvents from 'rxjs/Observable/fromEvent';
spyOn(ObservableEvents, 'fromEvent').and.returnValue(new Subject<any>().asObservable());
Run Code Online (Sandbox Code Playgroud)

新代码:

import * as rxjs from 'rxjs';
spyOn(rxjs, 'fromEvent').and.returnValue(new Subject<any>().asObservable());
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我们都会收到此错误:

错误:: fromEvent未声明为可写或没有设置器

我们找不到有效的资源来解决此问题。

更新#1

我们尝试使用

import * as rxjs from 'rxjs';
spyOn(jasmine.createSpyObj(rxjs), 'fromEvent').and.returnValue(new Subject<any>().asObservable());
Run Code Online (Sandbox Code Playgroud)

但是这次,我们得到了

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)
Run Code Online (Sandbox Code Playgroud)

xxx.directive.ts

line 113-> this.componentRef && this.componentRef.destroy();
this.componentRef = null;

line 70-> constructor(
...
private resolver: ComponentFactoryResolver,
...
  ) …
Run Code Online (Sandbox Code Playgroud)

rxjs karma-jasmine angular rxjs6

10
推荐指数
3
解决办法
634
查看次数

标签 统计

karma-jasmine ×2

angular ×1

jasmine ×1

rxjs ×1

rxjs6 ×1

typescript ×1

webpack ×1

webpack-4 ×1