【发布时间】:2021-02-18 04:59:06
【问题描述】:
我有一个类,当初始化一个新实例时,它会调用一个私有验证方法,但是我想单独测试验证方法。下面是一个简单的人为示例......可能有一种方法可以重构代码或 api,以避免这种情况,但解决它以更好地理解笑话成为了挑战。这可能吗?
class Foo {
constructor() {
this.bar()
}
bar() {
return 'bar'
}
}
describe('bar', () => {
let foo
let bar
beforeEach(() => {
// somehow mock the constructor here
Foo.prototype.bar = jest.fn()
foo = new Foo()
})
it('should be called once', () => {
foo.bar()
expect(foo.bar).toBeCalledTimes(1)
})
})
【问题讨论】:
-
bar()不是静态的,所以如果不先创建实例就无法调用它。你不能“初始化”一个类。 -
@ChrisG - 您可以使用任意原型创建对象,包括使用
Foo.prototype。 :-) -
作为一个在我职业生涯早期写过很多这样的测试的人,我想你会后悔积极嘲笑这样的事情。最好创建实例并检查
bar应该做的任何事情是否已完成,而不是验证bar是否被调用。
标签: javascript ecmascript-6 jestjs