Ir para o conteúdo

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.

hello.test.tsx
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.

switch.test.ts
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.

screen.test.ts
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.

para navegarEnterpara abrir
Copiado para a área de transferência