Guías
Testear
Un test no necesita el plugin, ni el módulo virtual, ni tus catálogos en disco. Crea una instancia con los mensajes que a ese test le importan y pásasela al provider. Así se testean los propios adaptadores.
Con una instancia basta
createVerbaly acepta los mensajes ahí mismo, así que un test nombra los dos o tres sobre los que asegura y nada más. Sin mocks, porque no hay nada que mockear.
import { createVerbaly } from 'verbaly';
import { VerbalyProvider } from '@verbaly/react';
const verbaly = createVerbaly({
locale: 'es',
messages: { es: { hello: 'Hola {name}' } },
});
render(
<VerbalyProvider instance={verbaly}><Hello /></VerbalyProvider>
);
expect(screen.getByText('Hola Aron')).toBeVisible();Asegura sobre el texto, no sobre la key
Dale a la instancia tu idioma fuente y tus aserciones se leen como se lee la pantalla. Un test que compara una key es un test que pasa con la interfaz vacía, porque una key que no resuelve se renderiza a sí misma.
Cambiar de idioma en un test
setLocale es asíncrono porque un catálogo real puede cargarse bajo demanda. Espéralo y luego asegura. Con los mensajes pasados ahí mismo no hay nada que descargar, así que resuelve al instante.
await verbaly.setLocale('en');
expect(verbaly.t('hello', { name: 'Aron' })).toBe('Hello Aron');Testear contra tus catálogos reales
Importa el JSON y pásalo. La forma da igual, plana o anidada, porque el runtime aplana lo que recibe. Útil para una foto de una pantalla en todos los idiomas, e innecesario para todo lo demás.
import es from '../locales/es.json';
const verbaly = createVerbaly({ locale: 'es', messages: { es } });Si un test importa el módulo virtual
El código que importa de virtual:verbaly necesita el plugin presente cuando se carga ese fichero. En Vitest eso significa añadir al config de test el mismo plugin que usa tu app. El camino más simple es dejar virtual:verbaly fuera de las unidades que testeas y pasar la instancia, que es lo que hacen los adaptadores.