Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

'[vuex] must call Vue.use(Vuex) before creating a store instance' when changing tests order in src/tests/vuex.js #245

Closed
@adragich

Description

Vue-testing-library Vuex unit test (src/tests/vuex.js) fails if you change tests order or remove ones with renderVuexTestComponent function. It's not a bug of library, but you should refactor your tests as you share these examples in official docs.

To Reproduce Steps to reproduce the behavior:

Run test. Move 'can render with an instantiated Vuex store' test to top or remove test cases with renderVuexTestComponent function. Test fails.

Expected behavior

Test passes.

Screenshot 2021年07月28日 at 13 25 35

Related information:

  • @testing-library/vue version: 0.0.0-semantically-released
  • Vue version: ^2.6.12
  • node version: v12.13.1
  • npm (or yarn) version: yarn@1.22.10

Relevant code or config (if any)

import '@testing-library/jest-dom'
import {render, fireEvent} from '@testing-library/vue'
import Vuex from 'vuex'
import VuexTest from './components/Store/VuexTest'
import {store} from './components/Store/store'
// A common testing pattern is to create a custom renderer for a specific test
// file. This way, common operations such as registering a Vuex store can be
// abstracted out while avoiding sharing mutable state.
//
// Tests should be completely isolated from one another.
// Read this for additional context: https://kentcdodds.com/blog/test-isolation-with-react
function renderVuexTestComponent(customStore) {
 // Render the component and merge the original store and the custom one
 // provided as a parameter. This way, we can alter some behaviors of the
 // initial implementation.
 return render(VuexTest, {store: {...store, ...customStore}})
}
test('can render with an instantiated Vuex store', async () => {
 const {getByTestId, getByText} = render(VuexTest, {
 store: new Vuex.Store({
 state: {count: 3},
 mutations: {
 increment(state) {
 state.count++
 },
 decrement(state) {
 state.count--
 },
 },
 actions: {
 increment(context) {
 context.commit('increment')
 },
 decrement(context) {
 context.commit('decrement')
 },
 },
 }),
 })
 await fireEvent.click(getByText('+'))
 expect(getByTestId('count-value')).toHaveTextContent('4')
 await fireEvent.click(getByText('-'))
 expect(getByTestId('count-value')).toHaveTextContent('3')
})
test('can render with vuex with defaults', async () => {
 const {getByTestId, getByText} = renderVuexTestComponent()
 await fireEvent.click(getByText('+'))
 expect(getByTestId('count-value')).toHaveTextContent('1')
})
test('can render with vuex with custom initial state', async () => {
 const {getByTestId, getByText} = renderVuexTestComponent({
 state: {count: 3},
 })
 await fireEvent.click(getByText('-'))
 expect(getByTestId('count-value')).toHaveTextContent('2')
})
test('can render with vuex with custom store', async () => {
 // This is a silly store that can never be changed.
 // eslint-disable-next-line no-shadow
 const store = {
 state: {count: 1000},
 actions: {
 increment: () => jest.fn(),
 decrement: () => jest.fn(),
 },
 }
 // Notice how here we are not using the helper method, because there's no
 // need to do that.
 const {getByTestId, getByText} = render(VuexTest, {store})
 await fireEvent.click(getByText('+'))
 expect(getByTestId('count-value')).toHaveTextContent('1000')
 await fireEvent.click(getByText('-'))
 expect(getByTestId('count-value')).toHaveTextContent('1000')
})

Additional context

I think you should discourage using instantiated store or show that initializing vuex on global Vue is okay (vuex does it anyways https://github.com/vuejs/vuex/blob/dev/src/store.js#L542).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

        AltStyle によって変換されたページ (->オリジナル) /