Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 使用Jasmine中的spyon.and.callFake修改私有数据成员_Angular_Unit Testing_Jasmine_Spy - Fatal编程技术网

Angular 使用Jasmine中的spyon.and.callFake修改私有数据成员

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(),它修改该服务的私有数据成员

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();
};