Angular 使用Jasmine中的spyon.and.callFake修改私有数据成员
我在服务中有一个公共方法a(),它修改该服务的私有数据成员Angular 使用Jasmine中的spyon.and.callFake修改私有数据成员,angular,unit-testing,jasmine,spy,Angular,Unit Testing,Jasmine,Spy,我在服务中有一个公共方法a(),它修改该服务的私有数据成员 A() { //call http // change private data member using call's result } 我正在对使用此服务的组件进行单元测试,因此希望使用Jasmine的spyOn.and.callFake()功能更改数据成员。但是,由于数据成员是私有的,我无法使用服务对象在组件中访问它。我不想为了测试的目的而公开数据成员 这里的最佳实践是什么?我假设您正在使用typescript,并且您试
A() {
//call http
// change private data member using call's result
}
我正在对使用此服务的组件进行单元测试,因此希望使用Jasmine的spyOn.and.callFake()功能更改数据成员。但是,由于数据成员是私有的,我无法使用服务对象在组件中访问它。我不想为了测试的目的而公开数据成员
这里的最佳实践是什么?我假设您正在使用typescript,并且您试图访问的类成员由
private
关键字标记
由于typescript基本上是Javascript之上的一个类型层,因此JS运行时不会阻止您访问类的私有成员。只是如果你试图这么做,typescript编译器会抱怨
如果您想在没有编译器抱怨的情况下访问私有成员,可以通过以下方式将其转换为any
类型:
spyOn(myObj, 'A').and.callFake(arg => {
(this as any).myPrivateProperty = this.doSomething();
};