gpt4 book ai didi

angular - Angular 6+单元测试中的spyOn isDevMode()?

转载 作者:行者123 更新时间:2023-12-03 23:36:55 36 4
gpt4 key购买 nike

我的代码包括 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()叫做?

最佳答案

首先将此函数包装到服务中:

import { isDevMode, Injectable } from '@angular/core';

@Injectable({ providedIn: 'root' })
export class DevModeService {
constructor() {}

isDevMode() {
return isDevMode();
}
}
然后你可以在任何你想要的地方注入(inject)这个服务,就像你对任何其他服务所做的那样:
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();
// ...
}

关于angular - Angular 6+单元测试中的spyOn isDevMode()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51390548/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com