我已经使用webpack 3进行了 Jasmine 测试。现在我尝试将其与webpack 4一起使用,但是存在一些问题。

首先,我对spyOn函数有问题。



我找到了一些有关此问题的解决方法的文章: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的功能上创建 spy 。该服务只有一种称为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)
}

最佳答案

在您的单元测试中,我可以看到几个问题。首先,您需要了解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();
    });
    

    关于javascript - 错误: <spyOnProperty> : function is not declared configurable,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58852549/

    10-09 12:49