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

Rya*_*yan 15 jasmine typescript karma-jasmine webpack webpack-4

我一直无法使用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)

Ant*_*kiy 14

还有spyOnProperty,它允许通过设置处理财产只读accessType参数'get'。

您的设置将如下所示

import * as mod from 'my/module';
//...
const funcSpy = jasmine.createSpy('myFunc').and.returnValue('myMockReturnValue');
spyOnProperty(mod, 'myFunc', 'get').and.returnValue(funcSpy);
Run Code Online (Sandbox Code Playgroud)

  • 很奇怪,但这对我不起作用。它失败并出现以下错误:===错误:&lt;spyOnProperty&gt;:myFunc 未声明可配置===。这就是我声明函数的方式:export var myFunc = function(){...}; (8认同)
  • @AmerMograbi 你找到避免错误的方法了吗? (2认同)

Cem*_*mel 3

在这个 GitHub 问题上,他们得出了相同的结论;目的是不可变的导出。但用户lavelle有一个解决方法(在此评论中),他们为测试和生产代码创建了不同的 webpack 配置。测试配置使用"commonjs"模块,这似乎通过不创建吸气剂来为他们工作。