我有一个问题吗?如何模拟包含静态变量的服务?
这是我的服务
@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的静态成员......
我对您的示例感到非常困惑。用模拟覆盖喷油器时,如何测试服务。但是仅考虑您的问题,我就不知道。仅仅是其内容,无法覆盖静态成员的访问。在您的AppConfigservice示例中,您可以通过在根中提供该服务作为单身人士的资格:
@Injectable({
providedIn: 'root'
})
现在,每当您测试具有依赖性的应用程序配置时,可以轻松模拟此服务。