【问题标题】:modify private data members using spyon.and.callFake in Jasmine在 Jasmine 中使用 spyon.and.callFake 修改私有数据成员
【发布时间】:2018-07-12 20:14:51
【问题描述】:
我在服务中有一个公共方法 A(),它修改了该服务的私有数据成员。
A() {
//call http
// change private data member using call's result
}
我正在对使用此服务的组件进行单元测试,因此希望通过使用 Jasmine 的 spyOn.and.callFake() 功能来更改数据成员。但是,由于数据成员是私有的,我无法使用服务对象在组件中访问它。我不想将数据成员公开以进行测试。
这里的最佳做法应该是什么?
【问题讨论】:
标签:
angular
unit-testing
jasmine
spy
【解决方案1】:
我假设您正在使用 typescript,并且您尝试访问的类成员由 private 关键字标记。
由于 typescript 基本上是 Javascript 之上的打字层,JS 运行时不会阻止您访问类的私有成员。只是如果你尝试这样做,打字稿编译器会抱怨。
如果您想在编译器不报错的情况下访问私有成员,可以将其转换为any 类型,方法如下:
spyOn(myObj, 'A').and.callFake(arg => {
(this as any).myPrivateProperty = this.doSomething();
};