作者:mobiledu2502880253 | 来源:互联网 | 2022-12-10 13:13
我的代码包含if
这样的代码块
服务:
import { isDevMode } from '@angular/core';
export class MyService {
constructor() {}
methodToTest(): {
if (!isDevMode()) {
doSomething();
} else {
doSomethingDifferentInDevMode();
}
}
}
my-service.spec.ts(仅相关行):
it('should run doSomething() when isDevMode() returns false', () => {
// what should i do here to mock a false value return for isDevMode() ?
expect(doSomething).toHaveBeenCalled();
});
我如何监视isDevMode()
此单个Angular单元测试使其返回false,以便我可以测试doSomething()
被调用的?
1> JB Nizet..:
首先将此函数包装到服务中:
import { isDevMode, Injectable } from '@angular/core';
@Injectable({ providedIn: 'root' })
export class DevModeService {
constructor() {}
isDevMode() {
return isDevMode();
}
}
然后,可以像使用任何其他服务一样在任何地方注入此服务:
import { DevModeService } from 'dev-mode.service';
export class MyService {
constructor(private devModeService: DevModeService) {}
methodToTest(): {
if (!this.devModeService.isDevMode()) {
doSomething();
} else {
doSomethingElse();
}
}
}
然后,您可以在测试MyService时监视DevModeService,就像对其他任何依赖项一样:
it('should do something when in dev mode') {
const devModeService: DevModeService = TestBed.get(DevModeService);
spyOn(devModeService, 'isDevMode').and.returnValue(true);
const myService: MyService = TestBed.get(MyService);
myService.methodToTest();
// ...
}
it('should do something else when in prod mode') {
const devModeService: DevModeService = TestBed.get(DevModeService);
spyOn(devModeService, 'isDevMode').and.returnValue(false);
const myService: MyService = TestBed.get(MyService);
myService.methodToTest();
// ...
}