Guias
Testar
Um teste não precisa do plugin, nem do módulo virtual, nem dos seus catálogos em disco. Crie uma instância com as mensagens que interessam a esse teste e entregue-a ao provider. É assim que os próprios adaptadores são testados.
Uma instância basta
createVerbaly aceita as mensagens ali mesmo, então um teste nomeia as duas ou três sobre as quais afirma e mais nada. Sem mocks, porque não há nada para mockar.
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();Afirme sobre o texto, não sobre a key
Dê à instância o seu idioma fonte e as suas afirmações leem-se como se lê o ecrã. Um teste que compara uma key é um teste que passa com a interface vazia, porque uma key que não resolve renderiza-se a si própria.
Mudar de idioma num teste
setLocale é assíncrono porque um catálogo real pode ser carregado sob demanda. Espere por ele e depois afirme. Com as mensagens passadas ali mesmo não há nada para descarregar, então resolve de imediato.
await verbaly.setLocale('en');
expect(verbaly.t('hello', { name: 'Aron' })).toBe('Hello Aron');Testar contra os seus catálogos reais
Importe o JSON e passe-o. A forma é indiferente, plana ou aninhada, porque o runtime achata o que recebe. Útil para uma fotografia de um ecrã em todos os idiomas, e desnecessário para todo o resto.
import es from '../locales/es.json';
const verbaly = createVerbaly({ locale: 'es', messages: { es } });Se um teste importa o módulo virtual
O código que importa de virtual:verbaly precisa do plugin presente quando esse ficheiro é carregado. No Vitest isso significa adicionar ao config de teste o mesmo plugin que a sua app usa. O caminho mais simples é deixar virtual:verbaly fora das unidades que você testa e passar a instância, que é o que os adaptadores fazem.