在开发的过程中,除了代码本身,测试也是重要的一环。大体来说,测试分为以下几种类型:

  • 单元测试
  • 功能测试
  • 性能测试
  • 安全测试

对于普通开发者而言,单元测试和功能测试是最常见的两种测试方式,本系列文章要介绍的几个工具是针对这两个方面的。
单元测试是对某一块独立的业务模块进行测试,可以是一个小功能,甚至一个函数。在前端开发中,我们可以选用 Karma 进行代码的单元测试,这个工具十分强大,它集成了像 Jasmine(基于 BDD 的测试框架),PhantomJS(无界面的浏览器) 这些测试套件。还有一些其他有用的功能,比如生成代码覆盖率的报告等。
本文只介绍 Karma 的基本使用。

单元测试工具 Karma

要使用 Karma 对代码进行单元测试,首先需要安装一系列的相关插件。我们来新建一个名为 myKarmDemo 的目录,并安装相关的插件:

npm install karma-cli -g
npm install karma jasmine-core karma-jasmine karma-phantomjs-launcher -D

接下来对我们的工程进行初始化:

karma init

之后会弹出一些选项,其中包含了一些初始化的配置工作,使用上下方向键可以在配置项之间进行切换。我这里选择使用 Jasmine 测试框架,使用 PhantomJS 无界面浏览器,整体的配置选项如下:

myKarmDemo karma init
Which testing framework do you want to use ?
Press tab to list possible options. Enter to move to the next question.
> jasmine
Do you want to use Require.js ?
This will add Require.js plugin.
Press tab to list possible options. Enter to move to the next question.
> no
Do you want to capture any browsers automatically ?
Press tab to list possible options. Enter empty string to move to the next question.
> PhantomJS
What is the location of your source and test files ?
You can use glob patterns, eg. "js/*.js" or "test/**/*Spec.js".
Enter empty string to move to the next question.
>
Should any of the files included by the previous patterns be excluded ?
You can use glob patterns, eg. "**/*.swp".
Enter empty string to move to the next question.
>
Do you want Karma to watch all the files and run the tests on change ?
Press tab to list possible options.
> no
Config file generated at "/home/charley/Desktop/myKarmDemo/karma.conf.js".

初始化完成之后,会在我们的项目中生成一个 karma.conf.js 文件,这个文件就是 Karma 的配置文件。
配置文件比较简单,能够比较轻松的看懂,这里我对原始的配置文件进行简单的修改,结果如下:

// Karma configuration
// Generated on Sun Oct 29 2017 21:45:27 GMT+0800 (CST)
module.exports = function(config) {config.set({// base path that will be used to resolve all patterns (eg. files, exclude)basePath: '',// frameworks to use// available frameworks: https://npmjs.org/browse/keyword/karma-adapterframeworks: ['jasmine'],// list of files / patterns to load in the browserfiles: ["./src/**/*.js","./test/**/*.spec.js",],
// list of files to excludeexclude: [],
// preprocess matching files before serving them to the browser// available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessorpreprocessors: {},
// test results reporter to use// possible values: 'dots', 'progress'// available reporters: https://npmjs.org/browse/keyword/karma-reporterreporters: ['progress'],
// web server portport: 9876,
// enable / disable colors in the output (reporters and logs)colors: true,
// level of logging// possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUGlogLevel: config.LOG_INFO,
// enable / disable watching file and executing tests whenever any file changesautoWatch: false,// start these browsers// available browser launchers: https://npmjs.org/browse/keyword/karma-launcherbrowsers: ['PhantomJS'],// Continuous Integration mode// if true, Karma captures browsers, runs the tests and exitssingleRun: true,// Concurrency level// how many browser should be started simultaneousconcurrency: Infinity})
}

然后创建一个 src 目录和一个 test 目录,在其中分别创建 index.js 和 index.spec.js 文件。
我要做的测试内容比较简单,对 index.js 中的两个函数(一个加法函数,一个乘法函数)进行测试。
index.js 文件如下:

// 加法函数
function add(x){return function(y){return x + y;}
}
// 乘法函数
function multi(x){return function(y){return x * y + 1;}
}

index.spec.js 文件如下:

describe("运算功能单元测试",function(){it("加法函数测试",function(){var add5 = add(5)expect(add5(5)).toBe(10)});
it("乘法函数测试",function(){var multi5 = multi(5)expect(multi5(5)).toBe(25)})
})

单测的代码写好后,就可以使用 karma start 来运行单元测试。由于我们的乘法代码中有错误,因此测试结果是这样的:

myKarmDemo karma start
29 10 2017 22:21:56.283:INFO [karma]: Karma v1.7.1 server started at http://0.0.0.0:9876/
29 10 2017 22:21:56.287:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
29 10 2017 22:21:56.294:INFO [launcher]: Starting browser PhantomJS
29 10 2017 22:21:56.549:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket 0h6boaepSUMwG7l2AAAA with id 44948955
PhantomJS 2.1.1 (Linux 0.0.0) 运算功能单元测试 乘法函数测试 FAILEDExpected 26 to be 25.test/index.spec.js:9:31
PhantomJS 2.1.1 (Linux 0.0.0): Executed 2 of 2 (1 FAILED) (0.048 secs / 0.002 secs)

将乘法函数的代码改为正常,再次启用 karma start 进行测试:

29 10 2017 22:23:08.670:INFO [karma]: Karma v1.7.1 server started at http://0.0.0.0:9876/
29 10 2017 22:23:08.673:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
29 10 2017 22:23:08.685:INFO [launcher]: Starting browser PhantomJS
29 10 2017 22:23:08.940:INFO [PhantomJS 2.1.1 (Linux 0.0.0)]: Connected on socket pl_pZDcAK4rBTpr0AAAA with id 40770640
PhantomJS 2.1.1 (Linux 0.0.0): Executed 2 of 2 SUCCESS (0.045 secs / 0.001 secs)

对了,如果使用 PhantomJS 作为代码的运行环境,其对于 ES6 的支持性不是太好,我在代码中使用了箭头函数,在运行时就报错了。为了解决这个问题,你可以使用 Chrome 或其他浏览器进行测试,也需要安装相应的 launcher,如果你使用 Chrome 浏览器测试,需要安装 karma-chrome-launcher 插件。
或者,你可以使用 Babel 等工具对代码进行转码后进行测试。
使用 PhantomJS 的好处在于其是一个无界面的浏览器运行环境,可以跑在命令行环境中,在某些没有 Chrome 等浏览器服务器环境下比较好用,方便代码验收和集成。
对于 Karma 的介绍就到这里了,本文只是对 Karma 的安装和使用进行了简单的介绍,权当抛砖引玉,至于更多的用法,您可以再进行研究。


http://www.taodudu.cc/news/show-3695823.html

相关文章:

  • Python自动化测试工具有哪些?哪一个更适合你呢?
  • 自动化测试工具有哪些?这10款测试工具你不能错过
  • 2022年全网最全最细最流行的自动化测试工具有哪些?
  • 软件自动化测试工具有哪些?手工测试与自动化测试应用场景区别
  • java框架都有哪些?
  • java框架有哪些常用框架?
  • java技能框架有哪些,详细说明
  • java框架都有哪些
  • ELK 搭建日志分析系统 + Zipkin服务链路追踪整合
  • 快速搭建ELK日志分析系统
  • 如何快速搭建一个简易的ELK日志分析系统
  • 超详细部署ELK日志分析系统!每一步骤都有记录!ELK的详细使用!
  • 实时海量日志分析系统的架构设计、实现以及思考
  • 自建防火墙日志分析系统V1
  • 理论+实验:ELK日志分析系统
  • 基于Flink的实时日志分析系统实践
  • ELK+FileBeat日志分析系统
  • ELK-日志分析系统
  • docker容器日志采集EFK日志分析系统的搭建与应用
  • 超实用的ELK日志分析系统
  • 大数据日志分析系统-hdfs日志存储
  • elk + kafka 简单搭建日志分析系统
  • 从零编写日志分析系统之需求分析
  • ELK日志收集系统概述
  • 实时日志分析系统-ELK
  • 那些不得不说的Android App专项测试必备命令,你值得拥有!
  • 大咖论赛——阿里云天池TOP选手不得不说的那些事儿
  • 函数 void insert(char *s, char *t, int pos) 将字符串 t 插入到字符串 s 中,插入位置为 pos。请用 C 语言实现该函数。假设分配给字符串 s 的空间足够让
  • 你不得不知道的polyfill
  • Android 不得不说的VideoView的一些坑及其解决方案(转)

常用的前端自动化测试工具介绍 —— Karma相关推荐

  1. karma测试html,常用的前端自动化测试工具介绍 —— Karma(二)

    上篇文章中,对 Karma 进行了简单的介绍,本文是上篇文章的一些延伸,主要是 Karma 和 ES6 相关的配置以及代码覆盖率的配置. 首先来让 Karma 实现 ES6 支持. ES6 支持 默认 ...

  2. 前端自动化测试工具:SlimerJS、phantomJS 和 CasperJS

    对于富客户端的 Web 应用页面,自动登录.页面修改.抓取页面内容.屏幕截图.页面功能测试-面对这些需求,使用后端语言需要花费不少的精力才能实现.此时 SlimerJS.phantomJS 或 Cas ...

  3. 4.前端开发工具介绍以及下载使用

    支持戳这里看视频学习 →→→ [上]前端开发工具介绍与下载...[下]写人生中第一个HTML 戳这里可看全系列内容 →→→ 戳我戳我戳我 文章目录 一.前言 二.编辑器介绍 1.VSCode a.介绍 ...

  4. 【1个月快速学习自动化测试】接口自动化测试(4) —— 接口自动化测试工具介绍

    接口测试的全称是应用程序编程接口(API)测试,从原理上来说,接口测试是模拟客户端向服务器端发送请求,然后检查能否获得正确的返回信息.接口测试用于测试RESTful API.SOAP Web服务,这些 ...

  5. Katalon Studio 自动化测试工具介绍

    前言 在软件测试这条道路上,大部分的职业技能发展道路都会是功能测试-> 自动化测试-> 性能测试-> 安全测试/测试开发. 但是却有着一部分人起初进入软件测试这一行看重的就是软件测试 ...

  6. ETL常用的三种工具介绍及对比 Datastage,Informatica 和 Kettle

    大家好,我是梦想家 Alex ~ ETL是数据仓库中的非常重要的一环,是承前启后的必要的一步.ETL负责将分布的.异构数据源中的数据如关系数据.平面数据文件等抽取到临时中间层后进行清洗.转换.集成,最 ...

  7. VSCode前端开发工具介绍、下载和安装(从头到尾)

    一.为什么使用VSCode作为前端开发工具?: Visual Studio Code(简称VS Code/VSC),个人认为它主要有以前几个好处: ①开源-可免费使用(例如,WebStorm和Subl ...

  8. 运维工作常用的性能分析工具介绍

    在运维工作中常用到的性能分析工具包括:vmstat.sar.iostat.netstat.free.ps.top.mpstat以及第三方开发工具,如:dstat.collectl及淘宝的开源监控项目t ...

  9. 常用的中文分词工具介绍

    本文首先介绍下中文分词的基本原理,然后介绍下国内比较流行的中文分词工具,如jieba.SnowNLP.THULAC.NLPIR,上述分词工具都已经在github上开源,后续也会附上github链接,以 ...

最新文章

  1. windows下mysql启动脚本
  2. 十九、面试必考,Java中的this关键字
  3. vs2005添加live555工程
  4. 类文件结构-method-init和类文件结构-method-main
  5. sql脚本对比工具_Java开发中用到的数据库迁移工具(flyway)
  6. java工厂模式学习
  7. WPF数据驱动应用程序上具有通用Lambda表达式的筛选器模式
  8. Oracle 警告:Weblogic 服务器中含有多个可遭远程利用的严重漏洞
  9. [JZOJ3347] 【NOI2013模拟】树的难题
  10. 模拟百度搜索框,输入时显示历史记录
  11. c语言程序设计最后一题调试时闪退,visual studio 2017调试时闪退。
  12. 诺顿病毒库手工下载地址及英文补丁下载
  13. [人工智能-深度学习-4]:数据流图与正向传播、动态图与静态图
  14. 电脑上显示打印机无法连接服务器错误代码,电脑怎么连接打印机显示错误代码的解决办法...
  15. 某项目GSM的tuner配置
  16. maven的创建与配置和加载依赖
  17. 毕设分享:基于STM32两轮自平衡小车 含源码、原理图及PCB文件
  18. java 大作业 题目_java大作业题目
  19. Java如何实现截取字符串
  20. python中序列类型是二维元素向量吗_序列类型是二维元素向量,元素之间存在先后关系,通过序号访问。...

热门文章

  1. 计算机基础教学-大学生明星观
  2. Python 安装 Crypto
  3. cmd切换硬盘的命令,从C盘切换到D盘怎么操作
  4. 基于Pytorch实现Seq2Seq模型进行机器翻译(实现了Attention机制、编码器解码器的多层双向结构)
  5. 自动化SQL注入工具-sqlmap
  6. JavaWeb page指令
  7. 颜色检测传感器模块知识分享
  8. python-None
  9. dnf剑魂buff等级上限_DNF昨天·今天·明天:小晶体上架无数量限制,公会本奖励再增加...
  10. 无缝衔接的人会遭报应吗_请大家不要伤害别人报应早晚会来