vue-cli 的单元测试

前言:关于vue-cli的单元测试之路 

一 安装

首页我们在安装的时候要注意一些步骤 (先确保你已经安装了node)

1.安装vue-cli  npm install --global vue-cli 

输入vue -V 如出现版本号证明已经安装成功

2 执行命令 vue init webpack 项目名称 在安装过程中会有一些选项 这里主要注意和单元测试相关的选项选择

其中会有一条是否安装单元测试 选择yes 并设置Karma和Mocha的单元测试

安装完成 我们可以执行npm run dev 将项目跑起来 这个时候我们再来看看文件目录 这里我们主要看两个目录

src 和test目录 src是我们的代码操作区域 test目录是我们写单元测试的目录

好了 这样我们的准备工作就完成了 

二 一个简单的单元测试

我们可以在src/components目录下建一个List.vue的文件 并将以下代码复制进去(符合语法的代码都可以)

并在router/index.js里面配置路由  这个很简单就不多说了 使我们能访问到这个页面如 http://localhost:8080/#/List 

另外我们再到test目录下打到test/unit/specs下新建一个List.spec.js文件 这个文件里面写上以下代码

import List from '@/components/List';import Vue from 'vue';

describe('List.vue', ()=> {

  it('displays items from the list', ()=> {

      // our test goes here

  })

})

在这个文件中,我们描述List.vue组件,我们有一个单独的空测试,它将检查它(组件)是否从列表中显示项目。这是Mocha测试的基本文件结构。

在我们的测试中,我们首先需要设置Vue组件。复制下面的代码,并将其放在注释“our test goes here”的位置:

// build componentconst Constructor = Vue.extend(List);const ListComponent = new Constructor().$mount();

我们扩展Vue然后安装我们的组件。安装组件很重要,因为这是在我们的模板中呈现HTML。这实际上意味着HTML被构建,并且我们的模板中的变量(例如{{item}})被填满数据,使得我们可以访问HTML(通过$el)。

随着我们的组件准备好,我们可以写第一个断言。在这个例子中,我们使用了’expect’风格,由Chai断言库提供,以及’should’和’assert’。 安装组件后放置以下代码:

/ assert that component text contains items from the listexpect(ListComponent.$el.textContent).to.contain('play games');

为了检查一切都能正常工作,我们可以运行测试!使用vue-cli项目,我们可以简单地输入npm run unit

这个时候我们会发现报错 

这个时候不要急 我们可以到http://phantomjs.org/download.html 这个网址下先去下载好 phantomjs-2.1.1-windows.zip这个包

把这个包解压后放在任意盘里面  然后把解压的文件里面的bin目录 配置在环境变量里面 (用户变量PATH)

检查是否配置成功 打包cmd 输入 phantomjs -v  如出现版本号 说明配置成功

这个时候再到vue cli 项目下 npm install 一下 再 npm run unit 我们就可以看到

这个时候就是单元测试跑成功了 

好的 这个时候就是我们第一个简单的单元测试 接下来我们看一下单元测试里面的代码是怎么写的

(1)模拟用户输入 

这是一个很好的开始,但是很少有应用程序只会显示数据。我们要添加的下一个功能是让用户能够在其列表中添加新项目。为此,我们需要一个输入框,用户可以在其中键入新项目,并在按钮上添加项目到列表中。这是List.vue的更新版本:


要开始测试此功能,请在List.spec.js中创建一个新的空测试,并添加测试代码:

it('adds a new item to list on click', ()=> {

    // our test goes here

})

首先我们要构建我们的组件,并模拟一个用户在输入框中输入的内容。由于VueJS将输入框的值绑定到newItem变量,所以我们可以简单地将我们的值设置为newItem。

// build componentconstConstructor = Vue.extend(List);constListComponent =newConstructor().$mount();// set value of new itemListComponent.newItem ='brush my teeth';

接下来我们需要点击按钮。我们必须在HTML中找到这个按钮,它可以使用$el。只有这一次,我们才可以使用querySelector来查找实际的元素。可以使用它的类(.buttonClass),其id(#buttonId)或元素的名称(button)来找到一个元素。

// find buttonconstbutton = ListComponent.$el.querySelector('button');

为了模拟一个点击,我们需要将按钮传递给一个新的事件对象。在测试环境中,List组件不会监听任何事件,因此我们需要手动运行监视器。

// simulate click eventconstclickEvent =newwindow.Event('click');button.dispatchEvent(clickEvent);ListComponent._watcher.run();

最后,我们需要检查newItem是否显示,我们已经知道如何从第一个测试中完成!我们可能还想检查newItem是否存储在列表数组中。

//assert list contains new itemexpect(ListComponent.$el.textContent).to.contain('brush my teeth');

expect(ListComponent.listItems).to.contain('brush my teeth');


以下是完整的测试文件:


现在我们可以再次运行我们的测试 npm run unit,应该会显示绿色!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容

  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 2,907评论 1 4
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,656评论 18 139
  • 相关概念 混合开发和前后端分离 混合开发(服务器端渲染) 前后端分离后端提供接口,前端开发界面效果(专注于用户的交...
    他爱在黑暗中漫游阅读 2,793评论 4 45
  • 在我们家最美好的时光就是星期五晚上,每到周五两个孩子都回家了,我最喜欢回家到超市买些孩子们爱吃的,到厨房做孩...
    林州小草阅读 457评论 0 0
  • 暖日晴云漫野闲,逐风追蝶向花间。 娉婷陌上相吟笑,争折繁枝缀鬓环。
    泓颖阅读 253评论 13 5