npm run unit
可以在后面加上-- --watch启动监听模式
别名配置
使用别名在Vue中很常见,可以让我们避免使用复杂、易错的相对路径:
import Page from '@/components/Test5/Test5'
上面的@就是别名,在使用Vue-cli搭建的项目中,默认已经在webpack.base.conf.js中对@进行了配置:
module.exports = { ... resolve: { extensions: ['.js', '.vue', '.json'], alias: { 'vue$': 'vue/dist/vue.esm.js', '@': path.join(__dirname, '..', 'src') } }, }
同样,使用Jest时也需要在Jest的配置文件jest.conf.js中进行配置
"jest": { "moduleNameMapper": { '^@/(.*)$': "<rootDir>/src/$1", }, ...
Shallow Rendering
创建一个App.vue:
<template> <div id="app"> <Page :messages="messages"></Page> </div> </template> <script> import Page from '@/components/Test1' export default { name: 'App', data() { return { messages: ['Hello Jest', 'Hello Vue'] } }, components: { Page } } </script>
然后创建一个Test1组件
<template> <div> <p v-for="message in messages" :key="message">{{message}}</p> </div> </template> <script> export default { props: ['messages'], data() { return {} } } </script>
针对App.vue编写单元测试文件App.spec.js
// 从测试实用工具集中导入 `mount()` 方法 import { mount } from 'vue-test-utils'; // 导入你要测试的组件 import App from '@/App'; describe('App.test.js', () => { let wrapper, vm; beforeEach(() => { wrapper = mount(App); vm = wrapper.vm; wrapper.setProps({ messages: ['Cat'] }) }); it('equals messages to ["Cat"]', () => { expect(vm.messages).toEqual(['Cat']) }); // 为App的单元测试增加快照(snapshot): it('has the expected html structure', () => { expect(vm.$el).toMatchSnapshot() }) });
执行单元测试后,测试通过,然后Jest会在test/__snapshots__/文件夹下创建一个快照文件App.spec.js.snap
// Jest Snapshot v1, https://goo.gl/fbAQLP exports[`App.test.js has the expected html structure 1`] = ` <div id="app" > <div> <p> Cat </p> </div> </div> `;
通过快照我们可以发现,子组件Test1被渲染到App中了。
这里面有一个问题:单元测试应该以独立的单位进行。