(已测试通过Angular 8.1.0和ngx-translate 11.0.1)
A)如果您在组件中使用翻译管道,请创建一个TranslateMockPipe
并将其添加到您的规范的declarations
数组中(如this issue所建议的)。
translate-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 ],
imports: [
...
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: TranslateFakeLoader
}
})
]
})
.compileComponents();
}));
这样,您可以使用ngx-translate内置的Stub,而无需像issue中建议的那样创建自己的Stub(我也尝试过它,但它没有起作用)。