如何在Jest中测试类的私有方法?



我用的是react typescript。

所以我在我的项目中有类似的类设置。Foo有两个成员方法a and bb是一个私有方法。有一个类Buzz,它负责获取数据,并在获取完成后调用传递给它的私有方法。

class Buzz {
callLater({ onMsg }) {
setTimeout(() => {
onMsg('Buzz completed')
}, 2000)
}
}
class Foo {
a() {
console.log('calling a');
const buzz = new Buzz()
buzz.callLater({onMsg: this.b})
}
private b(msg) {
console.log('calling b');
console.log(msg)
}
}

我想在typescript中测试私有method b,我正在做下面这样的事情。但是当测试运行器运行(jest)时,它失败了,并说fooInstance.b不是一个函数

const foo = new Foo();
const fooInstance = (Foo.prototype as unknown) as { b: () => void };
fooInstance.b()

不明白我将如何能够测试它。被困了好几个小时

有一个类Buzz,它负责获取数据,并在获取完成时调用传递给它的私有方法。

那么Buzz的责任是什么?它的职责是调用传递给它的参数。您不关心参数是什么,只关心buzz实例需要在适当的时候调用它。

foo.a的责任是什么?这是为了创建一个调用callLater方法的buzz,console.log是来自buzz的消息。你不关心它是通过调用foo.b来完成的,同样的结果可以通过这样写代码来实现:
class Foo {
a() {
console.log('calling a');
const buzz = new Buzz()
buzz.callLater({onMsg: console.log})
}
}

不要测试你的实现细节,测试你的行为。(就像jonsharpe说的)

相关内容

最新更新