【发布时间】:2020-03-09 12:59:55
【问题描述】:
我在保存对象数组的类中有一个私有属性
class myClass {
private objects: any = [];
public addObject(object: any): any {
objects.push(object);
}
}
我想测试一下是否调用了 push。 我该怎么做? 我当前的实现不起作用。
describe('myClass ', () => {
test('should add object to objects array', () => {
const pushSpy = jest.spyOn(Array.prototype, 'push');
const obj = new myClass();
obj.addObject({fakeObj})
expect(pushSpy).toHaveBeenCalled();
}
}
【问题讨论】:
-
为什么?您应该测试行为,而不是实现。
-
如果
objects' 值暴露,你的测试会更好。您应该检查是否已将新值添加到objects,而不是监视数组的 push 方法。 -
你是对的,但是我无法检查是否添加了对象,因为这是一个私有属性。我不想强制转换为任何 myClass 以访问私有属性。我的实现也不需要对象的 get 方法。那么我该如何测试呢?从我的角度来看,我不应该为测试调整课程,而是为课程测试。从应用程序的角度来看,没有理由将私有财产更改为公共财产。
标签: javascript node.js typescript unit-testing jestjs