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 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.

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

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 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.

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