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

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.