我有一个问题吗?如何模拟包含静态变量的服务?
这是我的服务
@Injectable()
export class AppConfigService {
static settings: IAppConfig;
constructor(private http: HttpClient) {}
load() {
const jsonFile = `assets/config/config.${environment.name}.json`;
return new Promise<void>((resolve, reject) => {
this.http.get(jsonFile).toPromise().then((response: IAppConfig) => {
AppConfigService.settings = response as IAppConfig;
resolve();
}).catch((response: any) => {
reject(`Could not load file '${jsonFile}': ${JSON.stringify(response)}`);
});
});
}
}
这是我的单元测试代码:
describe('AppConfigService', () => {
let service: AppConfigService;
beforeEach(() => {
TestBed.configureTestingModule({
imports: [
HttpClientTestingModule
],
providers: [
{provide: AppConfigService, useClass: MockAppConfigService}
]});
service = TestBed.get(AppConfigService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
it('should ran load well', () => {
expect(service.settings)......;
});
我不能使用service.settings,因为设置是AppConfigService的静态成员……
答案 0 :(得分:0)
您的榜样让我很困惑。用模拟替代喷油器时,如何测试服务。 但是仅考虑您的问题,我就无法知道。对静态成员的访问不能被覆盖,只能覆盖其内容。在您的AppConfigService示例中,您可以通过提供root用户来将此服务限定为单例:
@Injectable({
providedIn: 'root'
})
现在,只要您测试依赖于应用程序配置的内容,就可以轻松模拟此服务。