我已经使用webpack 3进行了茉莉花测试。现在我尝试将其与webpack 4一起使用,但是存在一些问题。
首先,我在 spyOn 函数上遇到问题。
错误:: myFunction未声明为可写或没有设置器
我找到了一些有关此问题的解决方法的文章:spy-on-getter-and-setter
我将 spyOn 更改为 spyOnProperty ,但是没有运气。现在我对
有问题>错误:: myFunction未声明为可配置
我的代码是用js编写的,看起来像这样:
import * as FocusServiceSpy from '../focus/FocusService';
describe('#onLinkClick', function() {
it('should call myFunction', () => {
spyOnProperty(FocusServiceSpy, 'myFunction', 'get');
expect(FocusServiceSpy.myFunction).toHaveBeenCalled();
});
}
您知道这可能是什么问题吗?
更新1:
我应该更具描述性。我想在 FocusService 的功能上创建间谍程序。该服务只有一种称为 myFunction 的方法。我唯一想实现的就是确保将调用此方法。
现在我将其更改为……并出现错误:
> TypeError:对象不是构造函数(正在评估“ new FocusService()”)(第180行)
describe('#onLinkClick', function() {
const FocusService = require('../focus/FocusService');
it('should call myFunction', () => {
const service = new FocusService();
spyOnProperty(service, 'myFunction').and.callThrough();
... (do some action)
expect(service.myFunction).toHaveBeenCalled();
});
}
FocusService 看起来像这样:
export function myFunction(arg) {
... (do some action)
}
答案 0 :(得分:1)
当我尝试将项目从Angular 8升级到9时,我遇到了同样的问题,在Google上找不到答案,但是我想出了一种方法来解决我的项目。
在tsconfig.json
中,将target
更改为es5
。
示例:
{
"compilerOptions": {
...
"target": "es5",
...
}
}
就是这样!希望这可以帮助有人尝试找到解决方案。
答案 1 :(得分:0)
在您的单元测试中,我可以看到几个问题。首先,您需要了解spyOnProperty
在属性上将spy
安装到现有对象上,但是它不会调用getter
本身。
您既不会创建对象,也不会将其提供给spyOnProperty
。
您使用函数名称而不是属性来调用spyOnProperty
名称。
您的测试的结构如下:
it('should call myFunction', () => {
// given
const service = new FocusService();
const spy = spyOnProperty(service , 'myProperty', 'get').and.callThrough();
// when
const myProperty = service.myProperty;
// then
expect(myProperty).toBe(<expected value>);
expect(spy).toHaveBeenCalled();
});