@testing-library/vue: montering af komponenter
Montér Vue-komponenter med @testing-library/vue, angiv props og globale plugins, simulér brugerhændelser, og verificér den renderede template.
@testing-library/vue: montering af komponenter er en gratis Frontend Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Frontend Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Frontend Academy-kurset indeholder 4 lektioner i alt.
Testing Library for Vue
@testing-library/vue giver den samme brugercentrerede testtilgang til Vue 3-komponenter. API'et afspejler React-versionen: render(), screen-forespørgsler, userEvent og jest-dom-matchere.
Installation
Installér testbibliotekspakkerne til Vue.
npm install -D @testing-library/vue @testing-library/user-event @testing-library/jest-dom
# Also install vitest for a Vite project:
npm install -D vitest jsdomrender() til Vue
render(Component, options) monterer en Vue-komponent. Brug options-objektet til at sende props, globale plugins og opsætningsindstillinger.
import { render, screen } from '@testing-library/vue';
import Button from './Button.vue';
test('renders button label', () => {
render(Button, { props: { label: 'Submit' } });
expect(screen.getByRole('button', { name: 'Submit' })).toBeInTheDocument();
});Videregivelse af props
Send props i options-objektet. TypeScript kontrollerer prop-typer, hvis du bruger defineProps<T>().
render(UserCard, {
props: {
user: { id: 1, name: 'Alice', email: 'alice@example.com' }
}
});Tilføjelse af globale plugins
Send global konfiguration (plugins, komponenter og provide-værdier) i indstillingen global.
import { createPinia } from 'pinia';
import router from './router';
render(App, {
global: {
plugins: [createPinia(), router],
provide: { theme: 'dark' }
}
});Genanvendelig renderWithPlugins-hjælpefunktion
Opret en tilpasset render-wrapper, der indeholder alle plugins, som er nødvendige til test, så du undgår at gentage opsætningen i hver test.
// test-utils.ts
import { render } from '@testing-library/vue';
import { createPinia } from 'pinia';
export function renderWithSetup(component: any, options = {}) {
return render(component, {
global: { plugins: [createPinia()] },
...options
});
}Test af hændelser
Brug userEvent til at interagere med komponenten, og kontrollér derefter det, brugeren ser, eller at der blev udløst hændelser.
import userEvent from '@testing-library/user-event';
test('emits submit on form submit', async () => {
const user = userEvent.setup();
const { emitted } = render(LoginForm);
await user.type(screen.getByLabelText('Email'), 'alice@example.com');
await user.click(screen.getByRole('button', { name: /login/i }));
expect(emitted().submit[0]).toEqual([{ email: 'alice@example.com' }]);
});Test af slots
Send slotindhold som en tekststreng eller komponent i render-indstillingerne.
render(Card, {
slots: {
default: '<p>Card body content</p>',
header: '<h2>My Card Title</h2>'
}
});
expect(screen.getByText('Card body content')).toBeInTheDocument();Test af v-model-adfærd
Udfyld inputfelter med userEvent, og kontrollér, at de udløste hændelser eller det viste resultat stemmer overens med den forventede opdaterede tilstand.
Test af Pinia-stores
Opret en ny Pinia-instans til hver test. Redigér store-tilstanden direkte under opsætningen, og kontrollér derefter det viste resultat.
const pinia = createPinia();
render(Counter, { global: { plugins: [pinia] } });
const store = useCounterStore();
store.count = 5; // set initial state
await nextTick();
expect(screen.getByText('5')).toBeInTheDocument();Find elementer efter asynkrone opdateringer
Vue opdaterer DOM'en asynkront. Brug await nextTick() eller findBy*-forespørgsler efter at have udløst en hændelse, der medfører asynkrone tilstandsændringer.
import { nextTick } from 'vue';
await user.click(button);
await nextTick();
expect(screen.getByText('Updated!')).toBeInTheDocument();Hurtigt tjek
Hvordan sender du Pinia eller Vue Router til en komponent, der testes med @testing-library/vue?
Opsummering: @testing-library/vue
render(Component, options) monterer Vue-komponenter. Send props i options.props. Tilføj plugins i global.plugins. Brug emitted() til at kontrollere brugerdefinerede hændelser. Send slots i options.slots. Brug await nextTick() til Vues asynkrone opdateringer. Opret en tilpasset renderWithSetup()-wrapper til fælles pluginopsætning.
Lær HTML med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 41
- Lektioner
- 163
Ofte stillede spørgsmål
Er lektionen “@testing-library/vue: montering af komponenter” gratis?
Ja — hele teksten til “@testing-library/vue: montering af komponenter” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Frontend Academy-kurset, skal du opgradere til CoddyKit PRO. Frontend Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “@testing-library/vue: montering af komponenter”?
Montér Vue-komponenter med @testing-library/vue, angiv props og globale plugins, simulér brugerhændelser, og verificér den renderede template. Du øver dig i Frontend Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Frontend Academy?
Der kræves ingen tidligere erfaring. Frontend Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “@testing-library/vue: montering af komponenter”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Frontend Academy-lektion?
Ja. Alle Frontend Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Jest-opsætning og grundlæggende tests
- @testing-library/react: render userEvent
- @testing-library/vue: montering af komponenter
- Mocking af moduler og API-kald