vue-cli
创建一个项目$vue create vue-test
Manually select features
进行手动选择功能配置:Babel
、TypeScript
、Router
、Unit Testing
:Jest
:In dedicated config files
将各配置信息配置在对应的 config
文件里:? Where do you prefer placing config for Babel, PostCSS, ESLint, etc.? (Use arrow keys)
❯ In dedicated config files
In package.json
? Save this as a preset for future projects? (y/N) n
jest.config.js
默认如下:
module.exports = {
preset: "@vue/cli-plugin-unit-jest/presets/typescript-and-babel",
};
我们可以按实际需求添加其它配置项:
module.exports = {
preset: "@vue/cli-plugin-unit-jest/presets/typescript-and-babel",
testMatch: ["**/tests/unit/**/*.spec.[jt]s?(x)"],
transformIgnorePatterns: ["<rootDir>/node_modules/"],
moduleFileExtensions: [
'js',
'vue'
],
transform: {
'^.+\\.vue$': '<rootDir>/node_modules/vue-jest',
'^.+\\.js$': '<rootDir>/node_modules/babel-jest'
},
moduleNameMapper: {
'^@/(.*)$': '<rootDir>/src/$1'
},
snapshotSerializers: [
'jest-serializer-vue'
]
};
testMatch
匹配哪些文件进行测试transformIgnorePatterns
不进行匹配的目录moduleFileExtensions
告诉Jest
需要匹配的文件后缀transform
匹配到 .vue
文件的时候用 vue-jest
处理, 匹配到.js
文件的时候用 babel-jest 处理moduleNameMapper
处理webpack
的别名,比如:将@
表示 /src
目录snapshotSerializers
将保存的快照测试结果进行序列化,使得其更美观vs code
打开项目你会发现根目录下有一目录test/unit
,里面就有一个已经生成的测试用例。
新建终端:运行单元测试。这里会根据jest.config.js
的testMatch
配置的条件进行运行。当前匹配的是所有tests/unit
下的测试文件
$yarn test:unit
新建一个couter.vue
文件简单的界面,点击按钮数目加1。在tests/unit
目录下新建一个测试文件couter.spec.ts
//couter.vue
<template>
<div>
<span class="count">{{ count }}</span>
<button @click="increment">Increment</button>
</div>
</template>
<script>
export default {
data() {
return {
count: 0
};
},
methods: {
increment() {
this.count++;
}
}
};
</script>
//couter.spec.ts
import { mount } from "@vue/test-utils";
import Couter from "@/views/Couter.vue";
describe("Couter.vue", () => {
const wrapper = mount(Couter);
it("测试累加", () => {
wrapper.setData({ count: 13 });
const button = wrapper.find("button");
button.trigger("click");
expect((wrapper.vm as any).count).toBe(14);
});
});
所有目前tests/unit
目录下有两个测试文件,如果还用yarn test:unit
命令的话就会跑所有测试文件。那么我们怎么指定运行一个文件呢,看下面命令:
$yarn jest -- **/tests/unit/**/couter.spec.ts
nextTick()。