- Notifications
You must be signed in to change notification settings - Fork112
🦎 Simple and complete Vue.js testing utilities that encourage good testing practices.
License
testing-library/vue-testing-library
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation

Simple and complete Vue.js testing utilities that encourage good testing practices.
Vue Testing Library is a lightweight adapter built on top ofDOM Testing Library and@vue/test-utils.
This module is distributed vianpm
and should be installed as one of yourproject'sdevDependencies
:
npm install --save-dev @testing-library/vue
This library haspeerDependencies
listings forVue 3
and@vue/compiler-sfc
.
You may also be interested in installingjest-dom
so you can usethe customJest matchers.
If you're using Vue 2, please install version 5 of the library:
npm install --save-dev @testing-library/vue@^5
<template><p>Times clicked: {{ count }}</p><button@click="increment">increment</button></template><script>exportdefault{name:'Button',data:()=>({count:0,}),methods:{increment(){this.count++},},}</script>
import{render,screen,fireEvent}from'@testing-library/vue'importButtonfrom'./Button'test('increments value on click',async()=>{// The `render` method renders the component into the document.// It also binds to `screen` all the available queries to interact with// the component.render(Button)// queryByText returns the first matching node for the provided text// or returns null.expect(screen.queryByText('Times clicked: 0')).toBeTruthy()// getByText returns the first matching node for the provided text// or throws an error.constbutton=screen.getByText('increment')// Click a couple of times.awaitfireEvent.click(button)awaitfireEvent.click(button)expect(screen.queryByText('Times clicked: 2')).toBeTruthy()})
You might want to install
jest-dom
to add handy assertions suchas.toBeInTheDocument()
. In the example above, you could writeexpect(screen.getByText('Times clicked: 0')).toBeInTheDocument()
.
Using
byText
queries it's not the only nor the best way to query forelements. ReadWhich query should I use? to discoveralternatives. In the example above,getByRole('button', {name: 'increment'})
is possibly the best option to get the button element.
You'll find examples of testing with different situations and popular librariesinthe test directory.
Some included are:
Feel free to contribute with more examples!
The more your tests resemble the way your software is used, the moreconfidence they can give you.
We try to only expose methods and utilities that encourage you to write teststhat closely resemble how your Vue components are used.
Utilities are included in this project based on the following guidingprinciples:
- If it relates to rendering components, it deals with DOM nodes rather thancomponent instances, nor should it encourage dealing with componentinstances.
- It should be generally useful for testing individual Vue components or fullVue applications.
- Utility implementations and APIs should be simple and flexible.
At the end of the day, what we want is for this library to be prettylight-weight, simple, and understandable.
Please note that TypeScript 4.X is required.
The TypeScript type definitions are in thetypes directory.
If you want to lint test files that use Vue Testing Library, you can use theofficial plugin:eslint-plugin-testing-library.
Looking to contribute? Look for theGood First Issuelabel.
Pleasefile an issue for bugs, missing documentation, orunexpected behavior.
Please file an issue to suggest new features. Vote on featurerequests by adding a 👍. This helps maintainers prioritize what to work on.
For questions related to using the library, please visit a support communityinstead of filing an issue on GitHub.
About
🦎 Simple and complete Vue.js testing utilities that encourage good testing practices.
Topics
Resources
License
Code of conduct
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Uh oh!
There was an error while loading.Please reload this page.