Giter Club home page Giter Club logo

vue-test-helpers's Introduction

vue-test-helpers Build Status

Helpers and syntactic sugars on top of vue-test-utils.

Install

First install the package with yarn or npm:

$ yarn add vue-test-helpers --dev

Also you'll need a peer dependency of vue-test-utils. Install it with:

$ yarn add @vue/test-utils --dev

Then, before your tests (for example in a setup script), import and call the function:

import setupHelpers from 'vue-test-helpers'

setupHelpers()

This will do two things:

  1. By default, make mount and shallowMount (also aliased as shallow) available globally, so you don't need to manually import { mount, shallowMount } from '@vue/test-utils' at the beginning of every test file. If this behavior is not what you want, just call setupHelpers({ registerGlobals: false }) instead.
  2. Add some helpers and syntactic sugars on top of Wrapper to create your test a better experience. See the next section for details.

Available helpers

These helpers are available on Wrapper instances only, since I'm not a fan of WrapperArray which is just a very thin wrapper around an array of Wrapper's. If you are dealing with a WrapperArray, just iterate through its .wrappers collection and run the helpers on each item.

expect(wrapper.has('p')).toBe(true)
expect(wrapper.has('#foo')).toBe(true)
expect(wrapper.has(childComponent)).toBe(false)
  • .hasAll|containsAll(...selectors): asserts that the wrapper has all provided selectors
expect(wrapper.hasAll('p', '#foo', childComponent)).toBe(false)
  • .hasAny|containsAny(...selectors): asserts that the wrapper has any of the provided selectors
expect(wrapper.hasAny('p', '#foo', childComponent)).toBe(true)
  • .hasNone|containsNone(...selectors): asserts that the wrapper has none of the provided selectors
expect(wrapper.hasNone('p', '#foo', childComponent)).toBe(false)
  • .hasClass|hasClasses(...classes): asserts that the wrapper has the CSS class(es).
expect(wrapper.find('.foo').hasClass('foo')).toBe(true)
expect(wrapper.find('.foo.bar').hasClasses('foo', 'bar')).toBe(true)
  • .hasAttribute(name, value): asserts that the wrapper has an attribute name with the value value
expect(wrapper.find('[foo="bar"]').hasAttribute('foo', 'bar')).toBe(true)
  • .hasProp(name, value): asserts that the wrapper has a prop name with the value value
expect(wrapper.hasProp('foo', 'bar')).toBe(true)

Note: hasClass, hasAttribute, and hasProp are actually available in vue-test-utils, but marked as deprecated and will be removed in 1.0.

  • .hasEmitted(name[, value]): asserts that an event name has been emitted, optionally with a value value
wrapper.vm.$emit('foo', 'bar')
expect(wrapper.hasEmitted('foo')).toBe(true)
expect(wrapper.hasEmitted('foo', 'bar')).toBe(true)
  • .id(): gets the id of the contained element
expect(wrapper.find('#foo').id()).toBe('foo')
  • .click|dblclick|input|submit|focus|blur|change([options]): triggers the click/dblclick/input/submit/focus/blur/change event on the contained element, optionally with an options object. These methods return the wrapper instance, useful for chaining.
expect(wrapper.click().hasEmitted('clicked')).toBe(true)
expect(wrapper.click({ button: 1 }).hasEmitted('rightClicked')).toBe(true)
  • .click|dblclick|input|submit|focus|blur|change(selector[, options]): finds the contained element by selector and triggers the click/dblclick/input/submit/focus/blur/change event on it, optionally with an options object. These methods return the wrapper instance, useful for chaining.
expect(wrapper.click('button').hasEmitted('buttonClicked')).toBe(true)
expect(wrapper.click('button', { ctrlKey: true }).hasEmitted('buttonCtrlClicked')).toBe(true)
  • .setValue(value): sets the value of the contained (input) element. This method returns the called instance, useful for chaining.
wrapper.find('input').setValue('foo').change()
  • .getValue(): gets the value of the contained (input) element
expect(wrapper.find('input').setValue('foo').getValue()).toBe('foo')
  • .value: a proxy for the value of the contained (input) element
wrapper.find('input').value = 'foo'
expect(wrapper.find('input').value).toBe('foo')

License

MIT © Phan An

vue-test-helpers's People

Contributors

phanan avatar renovate-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

vue-test-helpers's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.