首页 > 解决方案 > 如何模拟在构造函数 ES6 中调用的“new Class()” - Jasmine

问题描述

我正在尝试使用 Jasmine 对我的名为 MyClass 的 ES6 类进行单元测试。如下。

import SomeOtherClass from '../../someOtherClass';

export default class MyClass {
    constructor(){
        this.someOtherClass = new SomeOtherClass(param1, param2);
    }
}

问题是 SomeOtherClass 运行的一些代码会产生错误,因为提供的数据不是真实的。当我在单元测试中创建一个 new MyClass() 时,我想模拟那个类而不是被调用。我尝试了很多东西,但没有任何效果。他们之中有一些是

sinon.createStubInstance(SomeOtherClass)

或者

spyOn(NavigationBarComponent.prototype, 'constructor').and.callFake();

我尝试用 Jasmine 和 Sinon.js 做到这一点。任何帮助将不胜感激。谢谢

标签: unit-testingconstructorjasminees6-moduleses6-class

解决方案


我认为通常如果您想模拟一个依赖项,那么您将需要注入该依赖项并让测试控制注入它自己的依赖项。所以构造函数是一种简单的方法。

export default class MyClass {
    constructor(someOtherClassInstance){
        this.someOtherClass = someOtherClassInstance;
    }
}

现在,您的测试可以在实例化时提供它的存根或模拟实例MyClass


推荐阅读