搭建 karma + jasmine 测试环境

在前端开发的过程中,我们会写很多的功能函数,这样就会涉及到对这些功能函数进行单元测试,而karma就是一个很好用的可以在浏览器环境中进行测试的集成工具。

1. 什么是 karma

karma 是由Angular团队开发的一款测试工具,帮助开发者更好更快速地在多种环境下执行测试代码,拿到测试结果。在运行的时候,它会自动启动配置好的浏览器,同时也会启动一个 node 服务器,然后在启动好的浏览器中执行测试代码,并将测试代码执行结果传回给 node 服务器,然后 node 服务器在打印出收到的执行结果。

2. 安装 karma

$ npm  install karma -D

这里安装到项目路径下就可以了(-D 是 --save-dev 的简写)。

3. 初始化

$ ./node-modules/.bin/karma init

这里如果不想每次都执行本地路径下的 karma 命令,可以在全局安装 karma-cli

$ npm install karma-cli -g

以后就可以在任何路径执行 karma start 并且运行的 karma 都是在当前项目下安装的版本。

在 init 时会让你选择一些配置项:

test framework ---- 我这里选择的是jasmine,它是一款JavaScript断言测试库
use Require.js ---- 根据个人情况,我选择的是no
capture any browsers automatically ---- 选择浏览器,我选择的是无头浏览器PhantomJS
location of your source files ---- 为空
any of files included by the previous patterns be excluted ---- 为空
karma to watch all files and run the tests on change ---- 是否监测,我选择的是no

在选择完所有配置项后,会自动生成karma.conf.js配置文件。

4. 根据配置项的选择安装插件

(1) 测试框架选择的是jasmine,安装步骤如下:

$ npm install jasmine-core karma-jasmine -D

这里要装两个,一个是jasmine的核心,另一个是karma对jasmine的封装。

(2) 浏览器选择的是PhantomJS,安装步骤如下:

$ npm install karma-phantomjs-launcher -D

(3) 如果涉及到对以ES6编写的代码进行测试,就要安装Babel及其相关插件:

$ npm install babel-cli babel-preset-env babel-plugin-transform-es2015-modules-umd -D
$ npm install karma-babel-preprocessor -D

(4) 安装生成代码覆盖率报告的插件:

$ npm install karma-coverage -D

5. 修改karma配置文件

// karma.conf.js

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine'],
    files: [
      './src/**/*.js',
      './test/**/*.spec.js'
    ],
    exclude: [
    ],
    preprocessors: {
      './src/**/*.js': ['babel'],
      './test/**/*.spec.js': ['babel', 'coverage']
    },
    reporters: ['progress', 'coverage'],
    coverageReporter: {
      type: 'html',
      dir: 'coverage/'
    },
    port: 9876,
    colors: true,
    logLevel: config.LOG_INFO,
    autoWatch: false,
    browsers: ['PhantomJS'],
    singleRun: true,
    concurrency: Infinity
  })
}

修改Babel配置文件:

// .babelrc
{
  "presets": ["env"],
  "plugins": ["transform-es2015-modules-umd"],
  "auxiliaryCommentBefore": "istanbul ignore next"
}

6. 写测试文件

// PraiseButton.spec.js
import PraiseButton from '../src/PraiseButton.js';

describe('测试点赞组件', function () {
  it('addOne() 函数', function () {
    var testPraiseButton = new PraiseButton();
    testPraiseButton.addOne();

    expect(testPraiseButton.countNum).toBe(1);
  });
});

7. 运行测试

$ karma start

8. 结束

按照上述步骤,大家应该可以配置好自己的 karma + jasmine 测试环境,如果遇到问题或者文中有写错的地方,欢迎大家来讨论。文章末尾是需要安装模块的链接,大家可以一键直达。

参考链接

karma官网 ---- https://karma-runner.github.io/2.0/intro/installation.html
karma-cli ---- https://www.npmjs.com/package/karma-cli
karma-jasmine ---- https://www.npmjs.com/package/karma-jasmine
jasmine-core ---- https://www.npmjs.com/package/jasmine-core
karma-coverage ---- https://www.npmjs.com/package/karma-coverage

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

推荐阅读更多精彩内容

  • 在这个世界上,有太多的宗教和信仰。原本我以为这些宗教之所以存在是为了胡说八道,没想到外公走后,这些宗教却成了...
    梓k阅读 284评论 0 0
  • 醉卧花丛痴情种,三姓家奴忠良将? 不解凡尘锁心事,一壶浊酒醉天明。
    子夜月寒阅读 283评论 0 1
  • 一天,小艾特的爸爸妈妈一起下班去接小艾特去野外一起过生日。他们
    尛伤阅读 138评论 0 0
  • 悖论 悖论是我最无法理解的 最纠结的是他和群论种事物是相对的是一样的 那为什么还要分开论呢 查了罗素的悖论 ...
    啥时候死阅读 155评论 0 0