我在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);
});
});
我的课:
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;
}
}
如何在私有方法上使用spyOn
来修改此测试?
感谢您的帮助
答案 0 :(得分:1)
如果您确实需要测试私有方法,则可以创建一个扩展Calculator
的新类,仅用于测试。
在child
类中,我们使用父级private
的{{1}}方法。
这可以用打字稿完成,没有错误。
public
答案 1 :(得分:0)
如果它是您无法访问的私有数据,则不应测试它,因为它是可能会更改的内部实现。
您需要覆盖在内部使用此类的类的公共接口,以确保它们正确地工作,如何在内部工作是他们自己的事。
否则,您需要将其公开,或者至少将其作为依赖项传递,以便可以使用其模拟版本。
答案 2 :(得分:0)
在编译时检查TypeScript私有方法的可见性。禁用类型检查时,可以在测试中访问它们。这包括使用spyOn
监视私有方法,但是当直接调用它们时,它们并不能从间谍中受益。
Calculator
是一个类,应实例化以便访问其方法:
let calculator = new Calculator();
let result = calculator['Sum'](5, 2);
expect(result).toBe(7);
答案 3 :(得分:0)
在 Typescript 中,它不允许您测试私有方法。所以你需要一些东西来摆脱这种行为。你能做的就是这样
let result = (Calculator as any).Sum(2,3);
expect(result).toBe(5);
希望能解决您的问题。
答案 4 :(得分:0)
你可以尝试jest.spyOn
来获取私有方法的实现
类
export default class Calculator {
private Sum(a: number, b: number): number {
let c = a + b;
return c;
}
}
测试
const handleErrorSpy = jest.spyOn(Calculator.prototype, 'Sum');
const getSumImplementation = handleErrorSpy.getMockImplementation();
expect(getSumImplementation(1, 2)).toEqual(3);