我希望能够测试专用的Typescript
方法。请跳过您的why this is a bad idea
讲座。我听到了
这是演示代码:
class MyClass {
age: number
private ageAsString(): string {
return '15'
}
}
以下是我在测试文件中的选项:
1-编写//@ts-ignore
,允许TS编译此行。当您拨打200 x expect()
时,这会非常不便。但是我找不到一种基于文件的基于块的方法。
it('Test ageAsString', () => {
// @ts-ignore
expect(new MyClass().ageAsString()).to.equal('15')
})
2-将类对象转换为any
对象。这将禁用我从TS和IDE获得的自动完成和重构功能。起初似乎是个好主意,但1个月后,它将破坏200个测试用例或创建一些无法预料的错误。
it('Test ageAsString', () => {
const anyClass: any = new MyClass
expect(anyClass.ageAsString()).to.equal('15')
})
3-可以使用数组访问,该方法可以工作,但会产生与#2相同的问题。
it('Test ageAsString', () => {
expect(new MyClass()['ageAsString']()).to.equal('15')
})
我希望能够以某种方式测试这些方法而不会带来不利影响。现在我有2个选择,都不好。
请给我第三个选择
答案 0 :(得分:4)
测试受保护方法的另一种方法是创建Fake类并扩展需要测试的类。
class MyClass {
protected test() {
return true;
}
}
class FakeMyClass extends MyClass {
public test() {
return super.test();
}
}
it('test', () => {
const myClass = new FakeMyClass();
expect(myClass.test()).to.true;
})