测试框架vue2.0+webpack2.0+Karma+Mocha (二.操作)

一、准备工作

全局安装 vue-cli
$ npm install --global vue-cli
创建一个基于 webpack 模板的新项目
$ vue init webpack my-project

cmd窗口会有如下提示:依次回车4次 y n n n

cmd操作命令,点击看图:

![2]LYEF]KW0([9XS@EE{P]L.png

控制台选项卡弹出Karma+Mocha的时候可以选择Y,但是配置文件太复杂。不好入手~也不好理解

安装依赖,走你
$ cd my-project
$ npm install

项目创建成功后、在package.json文件中添加karma + Mocha测试框架需要的包、如下所示:

"karma": "^1.7.0",
"karma-coverage": "^1.1.1",// 生成代码覆盖率。
"karma-mocha": "^1.3.0",// 让你在karma中使用Mocha测试框架的插件
"karma-phantomjs-launcher": "^1.0.2",// 是一个没有界面的 “浏览器”
"karma-phantomjs-shim": "^1.4.0",// 解决phantomJS 不支持 Function.prototype.bind语法
"karma-sourcemap-loader": "^0.3.7",// Karma 插件,生成文件的 sourcemap
"karma-spec-reporter": "0.0.31",// 命令行输出测试用户的运行结果
"karma-webpack": "^2.0.2",// webpack与karma的连接
"mocha": "^3.5.0",// 测试框架
"sinon": "^2.1.0",// 与断言库相关
"sinon-chai": "^2.8.0",// 与断言库相关
"chai": "^3.5.0",// 断言库
"karma-sinon-chai": "^1.3.1",// 与断言库相关
cmd命令 安装上述测试所需要用到的包

$npm install

二、测试用例

  1. 我们依次创建3个文件 标识**
>--my-project // 根目录
> ---|src
>------|components
>------|router
> ---|test // 测试文件
>------|unit
>--------|specs
>----------|**Hello.spec.js**// 测试用例
>--------|**index.js**// 测试入口文件
>--------|**karma.conf.js** // 测试karma框架配置文件
  1. 测试用例:Hello.spec.js
// Hello.spec.js
import Vue from 'vue'
import Hello from '@/components/Hello'

describe('Hello.vue', function(){
  it('should render correct contents', function(){
    var Constructor = Vue.extend(Hello)
    var vm = new Constructor().$mount()
    expect(vm.$el.querySelector('.hello h1').textContent)
      .to.equal('Welcome to Your Vue.js App')
  })
})
  1. 测试入口文件:index.js
// index.js
import Vue from 'vue'

// require all test files (files that ends with .spec.js)
const testsContext = require.context('./specs', true, /\.spec$/)
testsContext.keys().forEach(testsContext)
  1. 测试karma框架配置文件:karma.conf.js
// This is a karma config file. For more details see
//   http://karma-runner.github.io/0.13/config/configuration-file.html
// we are also using it with karma-webpack
//   https://github.com/webpack/karma-webpack

module.exports = function(config) {
    config.set({
        // 是一个没有界面的 "浏览器",具备浏览器支持js和标准
        browsers: ['PhantomJS'],
        // mocha:写测试用例  、sinon-chai:断言库、phantomjs-shim:解决PhantomJS不支持 Function.prototype.bind
        frameworks: ['mocha', 'sinon-chai', 'phantomjs-shim'],
        // 报告文件
        reporters: ['spec', 'coverage'],
        // 测试入口文件
        files: ['./index.js'],
        // 预处理文件,与webpack结合使用
        preprocessors: {
            './index.js': ['webpack', 'sourcemap']
        },
        webpack: {
            resolve: {
                // 引入文件时可以忽略后缀名
                extensions: ['.js', '.vue', '.json'],
                // 引入文件的路径名过长,设置别名
                alias: {
                    'vue$': 'vue/dist/vue.esm.js',
                    '@': 'D:\\Users\\my-project\\src'
                }
            },
            module: {
                rules: [{
                    test: /\.vue$/,
                    loader: 'vue-loader'
                }, {
                    test: /\.(png|jpe?g|gif|svg)(\?.*)?$/,
                    loader: 'url-loader',
                    options: {
                        limit: 10000,
                        name: 'static/img/[name].[hash:7].[ext]'
                    }
                }, {
                    test: /\.js$/,
                        use:{
                            loader: 'babel-loader'
                        },
                    include: ['D:\Users\my-project\src', 'D:\Users\my-project\test']
                }, {
                    test: /\.css$/,
                    use: ['vue-style-loader', {
                        loader: 'css-loader',
                        options: {
                            minimize: false,
                            sourceMap: false
                        }
                    }]
                },  {
                    test: /\.less$/,
                    use: ['vue-style-loader', {
                        loader: 'css-loader',
                        options: {
                            minimize: false,
                            sourceMap: false
                        }
                    }, {
                        loader: 'less-loader',
                        options: {
                            sourceMap: false
                        }
                    }]
                }]
            },
            devtool: '#inline-source-map',
            // 针对加载器
            resolveLoader: {
                // 使用别名
                alias: {
                    'scss-loader': 'sass-loader'
                }
            }
        },
        coverageReporter: {
            dir: './coverage',
            reporters: [{
                type: 'lcov',
                subdir: '.'
            }, {
                type: 'text-summary'
            }]
        }
    })
}

三、运行测试结果

在package.json的属性scripts中加入测试命令

"unit": "karma start test/unit/karma.conf.js --single-run",
"test": "npm run unit"

cmd控制台执行:

npm run test

执行成功结果,点击看图:
![QZ[`$(K~A$K5K)8KVPV{DU.png

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

推荐阅读更多精彩内容