首页 > 语言 > JavaScript > 正文

详解Vue单元测试case写法

2024-05-06 15:33:53
字体:
来源:转载
供稿:网友

书接上文,karma+webpack搭建vue单元测试环境介绍了vue单元测试环境搭建及查看源文件的测试覆盖覆盖率。今天来说一下vue单元测试思路和case的写法。测试框架使用jasmine,语法参考。

代码地址:https://github.com/MarxJiao/vue-karma-test/tree/spec-demo

测试关注点

对于vue组件,单元测试测试主要关注以下几点:

    vue组件加载后,各数据模型是否符合预期 定义的方法是否可用 filter是否可用 带有props的组件,数据能否正常传递 异步更新DOM的情况

组件加载后的状态

要测试组件加载后的状态,首先我们需要将vue组件生成实例。并检测挂载后实例的数据状态。下面是个示例:

我们来看下src/app.vue组件的代码:

<template> <div>  <h1>{{title}}</h1>  <vc-message :message="message"></vc-message> </div></template><script> import child from './components/child.vue' export default {  data() {   return {    title: '标题',    message: '这是子组件'   }  },  components: {   'vc-message': child  },  mounted() {   this.title = 'Hello world'  },  methods: {   setMessage(msg) {    this.message = msg;   }  } }</script>

组件加载后title的值应该变成'Hello world',所以我们这样来写测试代码

// 引用vueimport Vue from 'vue';// 引用要测试的组件import app from '../../src/app.vue';// 描述要测试的内容describe('test app.vue', () => {  // 描述要测试的最小单元 it('组件加载后,title应该是Holle world', () => {  // 这里将app生成vue实例,并使用 $mount() 模拟挂载状态  let vm = new Vue(app).$mount();  // 断言组件的title是否变为了'Hello world'  expect(vm.title).toEqual('Hello world'); });});

执行karma start我们能看到测试通过。

测试组件里面的方法

我们知道vue将data和methods都挂在了vue实例的根节点下,所以测试vue组件中的方法也和上面测试状态一样,直接调用vm的方法就行了。我们来测试以下setMessage方法:

// 引用vueimport Vue from 'vue';// 引用要测试的组件import app from '../../src/app.vue';// 描述要测试的内容describe('test app.vue', () => {  // 描述要测试的最小单元 it('设置message为『你好世界』', () => {  // 这里将app生成vue实例,并使用 $mount() 模拟挂载状态  let vm = new Vue(app).$mount();  // 执行setMessage方法  vm.setMessage('你好世界');  // 断言组件的message是否变为了'你好世界'  expect(vm.message).toEqual('你好世界'); });});

执行karma start,就会看到测试成功。如果刚才没有关闭karma的话,在watch模式下,测试会自动进行。

怎么样?有没有感觉vue单元测试非常简单,赶紧做起来吧。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选