mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-23 14:15:13 +00:00
chore(examples): Add Jest + Vue Test Utils example (#4116)
* chore(examples): Add Jest + Vue Test Utils example * style: Lint * refactor: Rename button component & fix lint errors * refactor: Use export default * refactor: Babel 7 setup
This commit is contained in:
parent
6c5d89dead
commit
5c0d12fb13
1
examples/jest-vtu-example/.eslintignore
Normal file
1
examples/jest-vtu-example/.eslintignore
Normal file
@ -0,0 +1 @@
|
||||
*.spec.js.snap
|
14
examples/jest-vtu-example/.gitignore
vendored
Normal file
14
examples/jest-vtu-example/.gitignore
vendored
Normal file
@ -0,0 +1,14 @@
|
||||
# dependencies
|
||||
node_modules
|
||||
|
||||
# logs
|
||||
npm-debug.log
|
||||
|
||||
# Nuxt build
|
||||
.nuxt
|
||||
|
||||
# Nuxt generate
|
||||
dist
|
||||
|
||||
# coverage report
|
||||
coverage/
|
9
examples/jest-vtu-example/README.md
Normal file
9
examples/jest-vtu-example/README.md
Normal file
@ -0,0 +1,9 @@
|
||||
# Jest + Vue Test Utils example
|
||||
|
||||
```sh
|
||||
# Install dependencies
|
||||
npm i # or yarn
|
||||
|
||||
# Run tests
|
||||
npm test
|
||||
```
|
7
examples/jest-vtu-example/babel.config.js
Normal file
7
examples/jest-vtu-example/babel.config.js
Normal file
@ -0,0 +1,7 @@
|
||||
module.exports = {
|
||||
env: {
|
||||
test: {
|
||||
presets: ['@babel/preset-env']
|
||||
}
|
||||
}
|
||||
}
|
36
examples/jest-vtu-example/components/Btn/Btn.spec.js
Normal file
36
examples/jest-vtu-example/components/Btn/Btn.spec.js
Normal file
@ -0,0 +1,36 @@
|
||||
import { shallowMount } from '@vue/test-utils'
|
||||
import Btn from './Btn'
|
||||
|
||||
const factory = () => shallowMount(Btn, {
|
||||
propsData: {
|
||||
label: 'click me!'
|
||||
}
|
||||
})
|
||||
|
||||
describe('Btn', () => {
|
||||
test('mounts properly', () => {
|
||||
const wrapper = factory()
|
||||
expect(wrapper.isVueInstance()).toBeTruthy()
|
||||
})
|
||||
|
||||
test('renders properly', () => {
|
||||
const wrapper = factory()
|
||||
expect(wrapper.html()).toMatchSnapshot()
|
||||
})
|
||||
|
||||
test('calls handleClick on click', () => {
|
||||
const wrapper = factory()
|
||||
const handleClickMock = jest.fn()
|
||||
wrapper.setMethods({
|
||||
handleClick: handleClickMock
|
||||
})
|
||||
wrapper.find('button').trigger('click')
|
||||
expect(handleClickMock).toHaveBeenCalled()
|
||||
})
|
||||
|
||||
test('clicked is true after click', () => {
|
||||
const wrapper = factory()
|
||||
wrapper.find('button').trigger('click')
|
||||
expect(wrapper.vm.clicked).toBe(true)
|
||||
})
|
||||
})
|
25
examples/jest-vtu-example/components/Btn/Btn.vue
Normal file
25
examples/jest-vtu-example/components/Btn/Btn.vue
Normal file
@ -0,0 +1,25 @@
|
||||
<template>
|
||||
<button @click="handleClick">
|
||||
{{ label }}
|
||||
</button>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
name: 'Button',
|
||||
props: {
|
||||
label: {
|
||||
type: String,
|
||||
required: true
|
||||
}
|
||||
},
|
||||
data: () => ({
|
||||
clicked: false
|
||||
}),
|
||||
methods: {
|
||||
handleClick() {
|
||||
this.clicked = true
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
@ -0,0 +1,7 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`Btn renders properly 1`] = `
|
||||
<button>
|
||||
click me!
|
||||
</button>
|
||||
`;
|
5
examples/jest-vtu-example/layouts/default.vue
Normal file
5
examples/jest-vtu-example/layouts/default.vue
Normal file
@ -0,0 +1,5 @@
|
||||
<template>
|
||||
<div>
|
||||
<nuxt />
|
||||
</div>
|
||||
</template>
|
3
examples/jest-vtu-example/nuxt.config.js
Normal file
3
examples/jest-vtu-example/nuxt.config.js
Normal file
@ -0,0 +1,3 @@
|
||||
export default {
|
||||
mode: 'universal'
|
||||
}
|
46
examples/jest-vtu-example/package.json
Normal file
46
examples/jest-vtu-example/package.json
Normal file
@ -0,0 +1,46 @@
|
||||
{
|
||||
"name": "example-jest-vtu",
|
||||
"scripts": {
|
||||
"dev": "nuxt",
|
||||
"build": "nuxt build",
|
||||
"start": "nuxt start",
|
||||
"generate": "nuxt generate",
|
||||
"test": "jest ."
|
||||
},
|
||||
"dependencies": {
|
||||
"nuxt-edge": "latest"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.1.2",
|
||||
"@vue/test-utils": "^1.0.0-beta.25",
|
||||
"babel-core": "^7.0.0-bridge.0",
|
||||
"babel-jest": "^23.6.0",
|
||||
"jest": "^23.6.0",
|
||||
"jest-serializer-vue": "^2.0.2",
|
||||
"vue-jest": "^2.6.0"
|
||||
},
|
||||
"jest": {
|
||||
"moduleFileExtensions": [
|
||||
"js",
|
||||
"json",
|
||||
"vue"
|
||||
],
|
||||
"watchman": false,
|
||||
"moduleNameMapper": {
|
||||
"^~/(.*)$": "<rootDir>/$1",
|
||||
"^~~/(.*)$": "<rootDir>/$1"
|
||||
},
|
||||
"transform": {
|
||||
"^.+\\.js$": "<rootDir>/node_modules/babel-jest",
|
||||
".*\\.(vue)$": "<rootDir>/node_modules/vue-jest"
|
||||
},
|
||||
"snapshotSerializers": [
|
||||
"<rootDir>/node_modules/jest-serializer-vue"
|
||||
],
|
||||
"collectCoverage": true,
|
||||
"collectCoverageFrom": [
|
||||
"<rootDir>/components/**/*.vue",
|
||||
"<rootDir>/pages/*.vue"
|
||||
]
|
||||
}
|
||||
}
|
@ -0,0 +1,12 @@
|
||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
|
||||
|
||||
exports[`index renders properly 1`] = `
|
||||
<section class="container">
|
||||
<div>
|
||||
<h1 class="title">
|
||||
jest-vtu-example
|
||||
</h1>
|
||||
<btn-stub label="click me!"></btn-stub>
|
||||
</div>
|
||||
</section>
|
||||
`;
|
14
examples/jest-vtu-example/pages/index.spec.js
Normal file
14
examples/jest-vtu-example/pages/index.spec.js
Normal file
@ -0,0 +1,14 @@
|
||||
import { shallowMount } from '@vue/test-utils'
|
||||
import index from './index'
|
||||
|
||||
describe('index', () => {
|
||||
test('mounts properly', () => {
|
||||
const wrapper = shallowMount(index)
|
||||
expect(wrapper.isVueInstance()).toBeTruthy()
|
||||
})
|
||||
|
||||
test('renders properly', () => {
|
||||
const wrapper = shallowMount(index)
|
||||
expect(wrapper.html()).toMatchSnapshot()
|
||||
})
|
||||
})
|
20
examples/jest-vtu-example/pages/index.vue
Normal file
20
examples/jest-vtu-example/pages/index.vue
Normal file
@ -0,0 +1,20 @@
|
||||
<template>
|
||||
<section class="container">
|
||||
<div>
|
||||
<h1 class="title">
|
||||
jest-vtu-example
|
||||
</h1>
|
||||
<Btn label="click me!" />
|
||||
</div>
|
||||
</section>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import Btn from '~/components/Btn/Btn.vue'
|
||||
|
||||
export default {
|
||||
components: {
|
||||
Btn
|
||||
}
|
||||
}
|
||||
</script>
|
Loading…
Reference in New Issue
Block a user