Esq*_*uth 5 mocha.js jasmine webstorm chai typescript
我希望能够测试私有Typescript方法。请跳过你的讲座why this is a bad idea。我听说过。
这是一个演示代码:
class MyClass {
age: number
private ageAsString(): string {
return '15'
}
}
Run Code Online (Sandbox Code Playgroud)
以下是我在测试文件中的选项:
1 -//@ts-ignore允许 TS 编译此行的写入。当您调用 200 x expect()s时,这会很快变得不方便。但是我找不到基于文件的方法来执行此块。
it('Test ageAsString', () => {
// @ts-ignore
expect(new MyClass().ageAsString()).to.equal('15')
})
Run Code Online (Sandbox Code Playgroud)
2 - 将类对象转换为any对象。这会禁用我从 TS 和我的 IDE 获得的自动完成和重构功能。一开始这似乎是个好主意,但 1 个月后,它要么会破坏我的 200 个测试用例,要么会产生一些无法预料的错误。
it('Test ageAsString', () => {
const anyClass: any = new MyClass
expect(anyClass.ageAsString()).to.equal('15')
})
Run Code Online (Sandbox Code Playgroud)
3 - 可以使用数组访问,它可以工作,但会产生与 #2 相同的问题。
it('Test ageAsString', () => {
expect(new MyClass()['ageAsString']()).to.equal('15')
})
Run Code Online (Sandbox Code Playgroud)
我想以某种方式能够测试这些方法而没有缺点。现在我有两个选择,都不好。
请给我第三个选项
小智 7
测试受保护方法的另一种方法是创建一个 Fake 类并扩展需要测试的类。
class MyClass {
protected test() {
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
class FakeMyClass extends MyClass {
public test() {
return super.test();
}
}
Run Code Online (Sandbox Code Playgroud)
it('test', () => {
const myClass = new FakeMyClass();
expect(myClass.test()).to.true;
})
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3729 次 |
| 最近记录: |