(使用 Angular 8.1.0 和 ngx-translate 11.0.1 测试)
A) 如果您在组件中使用 翻译管道,请创建一个 TranslateMockPipe 并将其添加到您的规范的 declarations 数组中(如建议this issue)。
翻译-mock.pipe.ts
import {Pipe, PipeTransform} from '@angular/core';
@Pipe({
name: "translate"
})
export class TranslateMockPipe implements PipeTransform {
public name: string = "translate";
public transform(query: string, ...args: any[]): any {
return query;
}
}
your-component.spec.ts
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ YourComponent, TranslateMockPipe ],
imports: [
...
]
})
.compileComponents();
}));
在一种情况下,出于某种原因,我还必须执行步骤 B)。
B) 如果您在组件中直接使用翻译服务,例如this.translate.get('foo.bar'),您需要导入 TranslateModule 并使用 ngx-translate TranslateFakeLoader 作为 loader。
your-component.spec.ts
import {TranslateFakeLoader, TranslateLoader, TranslateModule} from '@ngx-translate/core';
...
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ YourComponent ], // you may add TranslateMockPipe from step 1 here, too
imports: [
...
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateFakeLoader
}
})
]
})
.compileComponents();
}));
这样,您可以使用 ngx-translate 内置存根,而不是按照 issue 中的建议创建自己的存根(它也不适用于我)。