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 se leem como se lê a tela. Um teste que compara uma key é um teste que passa com a interface vazia, porque uma key que não resolve se renderiza a si mesma.
Mudar de idioma num teste
setLocale não espera. Troca o idioma e pede o catálogo por trás, por isso com um catálogo real que carrega sob demanda uma asserção na linha seguinte lê o texto antigo. Espere primeiro pelo loadLocale e só depois troque. Com as mensagens passadas ali mesmo não há nada para baixar, então as duas linhas são instantâneas.
await verbaly.loadLocale('en');
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 uma tela 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 arquivo é carregado. No Vitest isso significa adicionar ao config de teste o mesmo plugin que a sua app usa, e então um componente em teste não precisa de wrapper: sem provider acima, useT() lê a instância que o plugin cria, como no navegador. O caminho mais simples continua sendo deixar virtual:verbaly fora das unidades que você testa e passar a instância, que é o que os adaptadores fazem.