在我的Angular 6项目中,在tsconfig.json和ts.config.spec.json中,我有以下部分:
"lib": [
"es2016",
"dom"
]
Run Code Online (Sandbox Code Playgroud)
是dom为了什么?
这里的官方文档说:“ ...您可以排除不想包含在项目中的声明,例如,如果您正在使用--lib es5,es6在节点项目上工作,则可以排除DOM。”
但是我不确定这在实践中意味着什么。我们不指定“您不需要的任何声明”。
在添加dom到libtsconfig.spec.ts中的数组之前,我的测试完全失败了。这是做什么的?
我知道 Stackoverflow 上有一些类似的问题,但它们并没有完全回答我的问题。
在我的 Angular 项目中运行 Karma 测试时,出现以下错误:
NullInjectorError: No provider for InjectionToken app.config!
我知道在我的 .spec 文件中我需要为 InjectionToken 指定一个提供者,但我不确定确切的语法。
这是我的app.config文件:
export let APP_CONFIG = new InjectionToken("app.config");
export const AppConfig: IAppConfig = {
relativeDateLimit: 604800000,
dateFormat: 'MM-DD-YYYY',
...
}
export const AppConfig: IAppConfig = {
relativeDateLimit: 604800000,
dateFormat: 'MM-DD-YYYY',
...
}
Run Code Online (Sandbox Code Playgroud)
然后在 .component.ts 文件中,我在构造函数中像这样使用它:
import { APP_CONFIG } from '../../app.config';
constructor(@Inject(APP_CONFIG) public appConfig) {}
Run Code Online (Sandbox Code Playgroud)
现在在这个组件的 .spec.ts 文件中,我知道我需要为 InjectionToken
我试着这样做:
import { InjectionToken } from "@angular/core";
...
beforeEach(async(() => { …Run Code Online (Sandbox Code Playgroud)