Ser*_*gey 9 testing internationalization typescript ngx-translate angular
我有一个使用这个库的应用程序。我如何用它测试组件?我不想测试库。我只需要开始测试我的组件,而不会出现关于 TranslateModule 然后 TranslateService 然后 TranslateStore 的多个错误......直到我在编译时出现错误。
有没有一种简单的方法可以使用这种依赖来运行我的测试?
再一次,我不想测试这个库(检查字符串是否被翻译)我需要对依赖这个库的组件运行测试。
wut*_*aer 12
对我来说,ngx-translate-testing 运行良好 https://www.npmjs.com/package/ngx-translate-testing
第一的
import { TranslateTestingModule } from 'ngx-translate-testing';
Run Code Online (Sandbox Code Playgroud)
然后
imports: [
...
TranslateTestingModule.withTranslations({ en: require('src/assets/i18n/en.json'), de: require('src/assets/i18n/de.json') })
],
Run Code Online (Sandbox Code Playgroud)
然后测试
it('should render german title', inject([TranslateService], (translateService: TranslateService) => {
translateService.setDefaultLang('de');
const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
const compiled = fixture.debugElement.nativeElement;
expect(compiled.querySelector('.title').textContent).toContain('GERMANTITLE');
}));
Run Code Online (Sandbox Code Playgroud)
如果您不一定需要翻译密钥,您可以TranslateModule
像这样在测试中导入:
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [
...
],
imports: [
TranslateModule.forRoot(),
],
providers: [
...
]
})
.compileComponents();
}));
Run Code Online (Sandbox Code Playgroud)
它只会显示翻译键
(使用 Angular 8.1.0 和 ngx-translate 11.0.1 测试)
A)如果您在组件中使用翻译管道,请创建一个TranslateMockPipe
并将其添加到declarations
您的规范数组中(如本期建议)。
翻译-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;
}
}
Run Code Online (Sandbox Code Playgroud)
你的component.spec.ts
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [ YourComponent, TranslateMockPipe ],
imports: [
...
]
})
.compileComponents();
}));
Run Code Online (Sandbox Code Playgroud)
在一种情况下,出于某种原因,我还必须执行步骤 B)。
B)如果你直接在你的组件中使用翻译服务,例如this.translate.get('foo.bar')
,你需要导入TranslateModule
并使用 ngx-translateTranslateFakeLoader
作为loader
它。
你的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();
}));
Run Code Online (Sandbox Code Playgroud)
这样,您可以使用 ngx-translate 内置存根,而不是按照问题中的建议创建自己的存根(它对我也不起作用)。
归档时间: |
|
查看次数: |
10524 次 |
最近记录: |