Lightweight adapter allowing dom-testing-library to be used to test Vue.js components built on top of @vue/test-utils
Clone or download
dfcook Merge pull request #13 from dfcook/mount-options
Support all mount options in vue-test-utils
Latest commit e7cb193 Dec 27, 2018


Lightweight adapter allowing dom-testing-library to be used to test Vue.js components built on top of @vue/test-utils

Build Status   Coverage Status   GitHub version

npm version   license

This library

The vue-testing-library is a an adapter that enables Vue testing using the framework-agnostic DOM testing library dom-testing-library


This module is distributed via npm which is bundled with node and should be installed as one of your project's devDependencies:

npm install --save-dev vue-testing-library


npm install --save-dev vue-testing-library
// package.json
  "scripts": {
    "test": "jest"

  "jest": {
    "moduleDirectories": [
    "moduleFileExtensions": [
    "testPathIgnorePatterns": [
    "transform": {
      "^.+\\.js$": "<rootDir>/node_modules/babel-jest",
      ".*\\.(vue)$": "<rootDir>/node_modules/vue-jest"

// .babelrc
  "presets": [
    ["env", {
      "modules": false,
      "targets": {
        "browsers": ["> 1%", "last 2 versions", "not ie <= 8"]
  "plugins": [
  "env": {
    "test": {
      "presets": ["env"]

// src/TestComponent.vue
    <span data-testid="test1">Hello World</span>

// src/TestComponent.spec.js
import 'jest-dom/extend-expect'
import { render } from 'vue-testing-library'
import TestComponent from './TestComponent'

test('should render HelloWorld', () => {
  const { queryByTestId } = render(TestComponent)
  expect(queryByTestId('test1')).toHaveTextContent('Hello World')


The render function takes up to 3 parameters and returns an object with some helper methods

  1. Component - the Vue component to be tested.
  2. RenderOptions - an object containing additional information to be passed to @vue/test-utils mount. This can be:
  • store - The object definition of a Vuex store, if present render will configure a Vuex store and pass to mount.
  • routes - A set of routes, if present render will configure VueRouter and pass to mount. All additional render options are passed to the vue-test-utils mount function in its options.
  1. configurationCb - A callback to be called passing the Vue instance when created. This allows 3rd party plugins to be installed prior to mount.


Lightweight wrapper around DOM element events and methods. Will call wait, so can be awaited to allow effects to propagate.


When in need to wait for non-deterministic periods of time you can use wait, to wait for your expectations to pass. The wait function is a small wrapper around the wait-for-expect module.

Waiting can be very important in Vue components, @vue/test-utils has succeeded in making the majority of updates happen synchronously however there are occasions when wait will allow the DOM to update. For example, see here


You'll find examples of testing with different libraries in the test directory. Some included are:

Feel free to contribute more!




dfcook eunjae-lee tim-maguire samdelacruz ankitsinghaniyaz lindgr3n kentcdodds