Typescript单元测试私有和受保护方法
我希望能够测试privateTypescript单元测试私有和受保护方法,typescript,jasmine,mocha.js,webstorm,chai,Typescript,Jasmine,Mocha.js,Webstorm,Chai,我希望能够测试privateTypescript方法。请跳过关于为什么这是个坏主意的讲座。我听说过 以下是演示代码: class MyClass { age: number private ageAsString(): string { return '15' } } 以下是我在测试文件中的选项: 1-写入允许ts编译此行的/@ts ignore。当您调用200 xexpect()s时,这会很快变得不方便。但是我找不到一种方法来实现这个基于块的基于文件
Typescript
方法。请跳过关于为什么这是个坏主意的讲座
。我听说过
以下是演示代码:
class MyClass {
age: number
private ageAsString(): string {
return '15'
}
}
以下是我在测试文件中的选项:
1-写入允许ts编译此行的/@ts ignore
。当您调用200 xexpect()
s时,这会很快变得不方便。但是我找不到一种方法来实现这个基于块的基于文件的方法
it('Test ageAsString', () => {
// @ts-ignore
expect(new MyClass().ageAsString()).to.equal('15')
})
2-将类对象转换为任何对象。这将禁用从TS和IDE获得的自动完成和重构功能。一开始这似乎是个好主意,但一个月后,它要么会破坏我的200个测试用例,要么会产生一些无法预料的bug
it('Test ageAsString', () => {
const anyClass: any = new MyClass
expect(anyClass.ageAsString()).to.equal('15')
})
3-可以使用阵列访问,这可以工作,但会产生与#2相同的问题
我希望能够以某种方式测试这些方法,而不会有缺点。现在我有两个选择,两个都不好
请给我第三个选项测试受保护方法的另一种方法是创建一个伪类并扩展需要测试的类
class MyClass {
protected test() {
return true;
}
}
如果你真的那么想说,那就把它公之于众。否则,,只需使用调用此私有方法的另一个MyClass方法,并确保它返回正确的结果。但我同意,如果您实际测试所有公共方法,则测试私有方法是非常不必要的。如果您使用的是类,则测试较小的私有函数比测试较大的公共函数更容易和更可读那么,您的可测试私有方法可能应该是其他服务的公共函数,这些服务只负责此项工作。显然,这并不容易和简单,因此,这个问题没有其他答案D
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;
})