Skip to main content

Examples

Basic example

<template>
<div>
<p>Times clicked: {{ count }}</p>
<button @click="increment">increment</button>
</div>
</template>

<script>
export default {
data: () => ({
count: 0,
}),

methods: {
increment() {
this.count++
},
},
}
</script>
import {render, fireEvent, screen} from '@testing-library/vue'
import Component from './Component.vue'

test('increments value on click', async () => {
render(Component)

// screen has all queries that you can use in your tests.
// getByText returns the first matching node for the provided text, and
// throws an error if no elements match or if more than one match is found.
screen.getByText('Times clicked: 0')

const button = screen.getByText('increment')

// Dispatch a native click event to our button element.
await fireEvent.click(button)
await fireEvent.click(button)

screen.getByText('Times clicked: 2')
})

Example using v-model:

<template>
<div>
<p>Hi, my name is {{ user }}</p>

<label for="username">Username:</label>
<input v-model="user" id="username" name="username" />
</div>
</template>

<script>
export default {
data: () => ({
user: 'Alice',
}),
}
</script>
import {render, fireEvent, screen} from '@testing-library/vue'
import Component from './Component.vue'

test('properly handles v-model', async () => {
render(Component)

// Asserts initial state.
screen.getByText('Hi, my name is Alice')

// Get the input DOM node by querying the associated label.
const usernameInput = screen.getByLabelText(/username/i)

// Updates the <input> value and triggers an `input` event.
// fireEvent.input() would make the test fail.
await fireEvent.update(usernameInput, 'Bob')

screen.getByText('Hi, my name is Bob')
})

More examples

You'll find examples of testing with different libraries in the test directory.

Some included are: