在我的角度测试中,我不能正确地模拟我注入的服务中函数的返回值。
我使用的是:
jasmine v2.8.0和jasmine-core v2.8.0
我简化了代码,使其更容易理解。这就是..。
这是我想要测试的服务:
export class NetworkService {
testNumber = 0;
constructor(private networkReducerService: NetworkReducerService) {
this.testNumber = networkReducerService.getNumber();
}
}这是我的spec.ts
describe('NetworkService', () => {
let service: NetworkService;
let networkReducerServiceSpy: jasmine.SpyObj<NetworkReducerService>;
beforeEach(() => {
const nRServiceSpy = jasmine.createSpyObj('NetworkReducerService', ['getNumber']);
TestBed.configureTestingModule({
providers: [NetworkService,
{provide: NetworkReducerService, useValue: nRServiceSpy}
]
});
service = TestBed.get(NetworkService);
networkReducerServiceSpy = TestBed.get(NetworkReducerService);
});
it('should have the following fields', () => {
networkReducerServiceSpy.getNumber.and.returnValue(1);
expect(networkReducerServiceSpy.getNumber).toHaveBeenCalled();
expect(service.testNumber).toBe(1);
});
});我想在我的NetworkReducerService中模拟这个getNumber方法
@Injectable({
providedIn: 'root'
})
export class NetworkReducerService {
getNumber() {
return 1;
}
}我得到以下错误:
错误:未定义应为% 1。
发布于 2019-10-16 13:09:32
你遇到了一个"a在b之前“的问题。在NetworkService类的构造函数中调用设置testNumber。因此,它在你第一次创建这个类的时候被调用--在你改变spy的值之前很久。要么在实例化服务之前设置该值,要么重构您的NetworkService以在方法中设置该值,该方法可以在创建后调用而不是在构造函数中进行测试。
https://stackoverflow.com/questions/58311977
复制相似问题