17 javascript testing typescript jestjs
我在Calculator课堂上的函数是私有的,我无法以这种方式进行测试,
describe('calculate', function() {
it('add', function() {
let result = Calculator.Sum(5, 2);
expect(result).toBe(7);
});
it('substract', function() {
let result = Calculator.Difference(5, 2);
expect(result).toBe(3);
});
});
Run Code Online (Sandbox Code Playgroud)
我的课:
export default class calculator {
private Sum(a: number, b: number): number {
let c = a + b;
return c;
}
private Difference(a: number, b: number): number {
let c = a - b;
return c;
}
}
Run Code Online (Sandbox Code Playgroud)
如何使用spyOn私有方法修改此测试?
谢谢你的帮助
Pau*_*uli 18
最简单的解决方案是监视计算器类的“Sum”方法,我想到的是:
jest.spyOn(calculator as any, 'Sum').<do-something>();
Run Code Online (Sandbox Code Playgroud)
小智 13
在 Typescript 中,它不允许您测试私有方法。所以你需要一些东西来逃避这种行为。你能做的是这样的
let result = (Calculator as any).Sum(2,3);
expect(result).toBe(5);
Run Code Online (Sandbox Code Playgroud)
我希望这能解决你的问题。
小智 6
您可以尝试jest.spyOn获取私有方法的实现
班级
export default class Calculator {
private Sum(a: number, b: number): number {
let c = a + b;
return c;
}
}
Run Code Online (Sandbox Code Playgroud)
测试
const handleErrorSpy = jest.spyOn(Calculator.prototype, 'Sum');
const getSumImplementation = handleErrorSpy.getMockImplementation();
expect(getSumImplementation(1, 2)).toEqual(3);
Run Code Online (Sandbox Code Playgroud)
如果它是您无法访问的私有数据,那么您不应该测试它,因为它是可能会更改的内部实现。
您需要覆盖在内部使用此类的类的公共接口,以确保它们正常工作,它们在内部如何工作是他们自己的事。
否则,您需要将其公开,或者至少将其作为依赖项传递,以便您可以使用它的模拟版本。
| 归档时间: |
|
| 查看次数: |
42531 次 |
| 最近记录: |