gpt4 book ai didi

javascript - Mocha JS - 模拟父类模块

转载 作者:行者123 更新时间:2023-11-30 15:51:23 26 4
gpt4 key购买 nike

背景

我有 A 类,它从 B 类扩展而来:

A = class A
...
my_inner_func: (param1) =>
return new MyHelper()

B = class B extends A
...

我想做什么?

在单元测试中,my_inner_func() 应该返回 MyMockHelper()

我尝试过的

a = rewire './a.coffee'
b = rewire './b.coffee'

a.__set__
MyHelper: MyMockHelper

b.__set__
A: a.A

但是 B().my_inner_func() 返回 MyHelper 而不是 MyMockHelper

我的问题

如何模拟 CoffeeScript(或 JavaScript)中扩展类使用的模块?

最佳答案

rewire 的文档没有提及任何关于类实例变量的内容。我认为它真的只是为了“重新布线”被测模块的全局或顶级范围。

另外,rewire 有一些 limitations .其中对const或babel的支持好像是ify了,或许试试native解决方案?

在基本层面上,模拟只是覆盖或替换对象原型(prototype)上的方法,所以像这样的东西应该适用于您的测试用例

// super class
class Polygon {
constructor(height, width) {
this.height = height;
this.width = width;
}

get area() {
return this.calcArea();
}

calcArea() {
return this.height * this.width;
}
}
// superclass instance
const rect = new Polygon(10, 2);
console.log('rect', rect.area); // 20

// subclass
class Square extends Polygon {
constructor(side) {
super(side, side)
}
}

// subclass instance
const square = new Square(2);
console.log('square', square.area); // 4

// mocked calcArea of subclass
square.calcArea = function() {
return 0;
};

// result from new mocked calcArea
console.log('mocked', square.area); // 0

使用 mocha 可能看起来像这样......

import Square from './Square';

describe('mocks', () => {

it('should mock calcArea', () => {

const square = new Square(2);

square.calcArea = function() {
return 0;
};

expect(square.area).to.equal(0);
});

});

这是一个 code pen一起玩

关于javascript - Mocha JS - 模拟父类模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39271004/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com