Zum Hauptinhalt springen

Testen

expectLocalesConsistent​

function expectLocalesConsistent(locales: Locales): void;

Aus @one-unity/mocks-documents. Prüft eine Locale-Datei auf genau die Fehler, die der Typ LocaleShape nicht sehen kann — und die sonst erst in einer Sprache auffallen, die niemand testet.

import { expectLocalesConsistent } from "@one-unity/mocks-documents";
import { locales } from "./ou.sp.IF.installer.step.globalPropertiesLocales";

describe("locales", () => {
it("should be consistent across all languages", () => {
expectLocalesConsistent(locales);
});
});

Geprüft wird:

  • Key-Kollisionen innerhalb einer Sprache — wenn verschachtelte und Punkt-Notation-Keys zum selben Properties-Key zusammenfallen und ein Eintrag den anderen überschreibt.
  • Abweichende Key-Mengen zwischen den Sprachen, für Sprachen, die nicht als Locales typisiert sind.
  • Abweichende Platzhalter-Mengen beim selben Key. "{{count}} Dokumente" gegen "Documents found" ist ein Fehler: die Zahl verschwindet in der Übersetzung stillschweigend.

Die Reihenfolge von Keys und Platzhaltern spielt keine Rolle. Die erste Sprache im Objekt dient als Referenz.

Ergänzt die Typprüfung, ersetzt sie nicht

LocaleShape fängt fehlende und falsch verschachtelte Keys bereits beim Kompilieren. Dieser Helfer deckt die Fälle darüber hinaus ab — beide gehören zusammen.

Der Mock für ou.sp.I18n​

@one-unity/mocks-documents registriert automatisch einen virtuellen Mock für @one-unity/library/ou.sp.I18n. Er hat dieselbe Semantik wie die echte Implementierung — Auflösung über context.getFromSystemTable, Rückfall auf den Key, {{platzhalter}}-Ersetzung, TError als echte Error-Unterklasse mit übersetzter message und cause — protokolliert aber nicht.

In Tests wird die Systemtabelle üblicherweise so gefüllt, dass der Key durchgereicht wird; die Assertions prüfen dann Keys statt übersetzter Texte:

import { context } from "@one-unity/mocks-documents";

beforeEach(() => {
context.getFromSystemTable.mockImplementation((key) => key);
});

Für Assertions auf den Installationsvorgang ist der Mock selbst zugänglich:

import { I18n } from "@one-unity/mocks-documents";

expect(I18n.installLocales).toHaveBeenCalledWith(
expect.objectContaining({ baseName: "ou.sp.ImportFiles" }),
expect.anything()
);