Unit Testing
When running tests, it's important to have the languages available immediately and synchronously. Transloco provides the TranslocoTestingModule
, which allows you to specify the languages and configuration needed for your specs.
To follow the DRY (Don't Repeat Yourself) principle, it's a good idea to create a module factory function that can be reused in each spec. Here's an example:
import { TranslocoTestingModule, TranslocoTestingOptions } from '@jsverse/transloco';
import en from '../assets/i18n/en.json';
import es from '../assets/i18n/es.json';
export function getTranslocoModule(options: TranslocoTestingOptions = {}) {
return TranslocoTestingModule.forRoot({
langs: { en, es },
translocoConfig: {
availableLangs: ['en', 'es'],
defaultLang: 'en',
},
preloadLangs: true,
...options,
});
}
Using the module in your spec files
describe('AppComponent', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [getTranslocoModule()],
declarations: [AppComponent],
}).compileComponents();
}));
it('should work', () => {
const fixture = TestBed.createComponent(AppComponent);
fixture.detectChanges();
expect(
fixture.debugElement.query(By.css('h1')).nativeElement.innerText
).toBe('hello');
});
});
You can find a full example here.
Testing scopes
If you need to test scopes, you should add them as languages. For example:
export function getTranslocoModule(options: TranslocoTestingOptions = {}) {
return TranslocoTestingModule.forRoot({
langs: {
en,
es,
'admin-page/en': admin,
'admin-page/es': adminSpanish,
},
translocoConfig: {
availableLangs: ['en', 'es'],
defaultLang: 'en',
},
preloadLangs: true,
...options,
});
}
You can find an example here.
TypeScript Configuration
To import JSON files in your TypeScript project, you need to update your tsconfig.json
with the following properties:
{
"resolveJsonModule": true,
"esModuleInterop": true
}
Last updated
Was this helpful?