Angular spyOn isDevMode()角度为6+;单元测试?
我的代码包括一个像这样的Angular spyOn isDevMode()角度为6+;单元测试?,angular,unit-testing,jasmine,karma-jasmine,Angular,Unit Testing,Jasmine,Karma Jasmine,我的代码包括一个像这样的if块 服务: import { isDevMode } from '@angular/core'; export class MyService { constructor() {} methodToTest(): { if (!isDevMode()) { doSomething(); } else { doSomethingDifferentInDevMode(); } } } my-service.
if
块
服务:
import { isDevMode } from '@angular/core';
export class MyService {
constructor() {}
methodToTest(): {
if (!isDevMode()) {
doSomething();
} else {
doSomethingDifferentInDevMode();
}
}
}
my-service.spec.ts(仅适用于相关行):
如何监视
isDevMode()
,使其在此单角度单元测试中返回false,以便我可以测试调用了doSomething()
。看起来答案在注释中。谢谢@JBNizet
// dev-mode-service.ts
import { isDevMode } from '@angular/core';
export class DevModeService {
constructor() {}
isDevMode(): {
return isDevMode();
}
}
// MyService.ts
import { isDevMode } from 'dev-mode-service';
export class MyService {
constructor() {}
methodToTest(): {
if (!isDevMode()) {
doSomething();
} else {
doSomethingDifferentInDevMode();
}
}
}
首先将此函数包装到服务中:
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 = TestBed.inject(DevModeService);
spyOn(devModeService, 'isDevMode').and.returnValue(true);
const myService = TestBed.inject(MyService);
myService.methodToTest();
// ...
}
it('should do something else when in prod mode') {
const devModeService = TestBed.inject(DevModeService);
spyOn(devModeService, 'isDevMode').and.returnValue(false);
const myService = TestBed.inject(MyService);
myService.methodToTest();
// ...
}
isDevMode()的定义方式和位置。发布相关代码。将调用封装到服务方法中,注入服务,并在测试中监视服务方法。我发布了一个答案。效果非常好!非常感谢。
it('should do something when in dev mode') {
const devModeService = TestBed.inject(DevModeService);
spyOn(devModeService, 'isDevMode').and.returnValue(true);
const myService = TestBed.inject(MyService);
myService.methodToTest();
// ...
}
it('should do something else when in prod mode') {
const devModeService = TestBed.inject(DevModeService);
spyOn(devModeService, 'isDevMode').and.returnValue(false);
const myService = TestBed.inject(MyService);
myService.methodToTest();
// ...
}