前端自动化测试工具--使用karma进行javascript单元测试

前端领域 Webpack 与 Karma 的测试环境搭建 本文旨在帮助前端开发者理解Webpack和Karma的基本原理,并掌握如何将它们结合起来搭建一个高效的测试环境。我们将覆盖从基础配置到实际应用的完整流程。介绍Webpack和Karma的核心概念讲解两者的协同工作原理分步指导环境搭建提供实际应用案例分享最佳实践和常见问题解决方案Webpack: 一个现代JavaScript应用程序的静态模块打包工具Karma: 一个测试运行器,可以在真实浏览器中运行测试测试覆盖率: 衡量测试代码覆盖了多少应用代码的指标测试运行器。 阅读详情

前面我写了一篇博客是《前端自动化测试工具PhantomJS+CasperJS结合使用教程》其中使用CasperJS不仅可以进行单元测试,还可以进行浏览器测试,是个很不错的工具,今天介绍的工具是Karma+Jasmine+PhantomJS组合的前端javascript单元测试工具。

1.介绍

Karma是由Google团队开发的一套前端测试运行框架,karma会启动一个web服务器,将js源代码和测试脚本放到PhantomJS或者Chrome上执行。

2.安装

  • 包管理package.json
npm init

一路回车下去即可
- 在项目中安装karma包

npm i karma --save-dev
  • karma初始化
karma init

按照下面的选择好

E:\javascript\auto-test\karma-demo>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.
> src/**/*.js
> test/**/*.js
14 10 2016 10:49:43.958:WARN [init]: There is no file matching this pattern.

>

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.
> yes


Config file generated at "E:\javascript\auto-test\karma-demo\karma.conf.js".

上图是选项的示例,这里使用jasmine测试框架,PhantomJS作为代码运行的环境(也可以选择其他浏览器作为运行环境,比如Chrome,IE等)。最后在项目中生成karma.conf.js文件
- 安装jasmine-core

npm i jasmine-core --save-dev

3.demo1–ES5

目录结构

karma-example
    ├──  src
         ├──  index.js
    ├──  test
    ├──  package.json

源码:src–index.js

function isNum(num) {
    if (typeof num === 'number') {
        return true;
    } else {
        return false;
    }
}

测试:test–index.js

describe('index.js: ', function() {
  it('isNum() should work fine.', function() {
    expect(isNum(1)).toBe(true)
    expect(isNum('1')).toBe(false)
  })
})

运行,执行命令

karma start

命令行结果

14 10 2016 10:56:13.038:WARN [karma]: No captured browser, open http://localhost:9876/
14 10 2016 10:56:13.067:INFO [karma]: Karma v1.3.0 server started at http://localhost:9876/
14 10 2016 10:56:13.101:INFO [launcher]: Launching browser PhantomJS with unlimited concurrency
14 10 2016 10:56:13.119:INFO [launcher]: Starting browser PhantomJS
14 10 2016 10:56:16.207:INFO [PhantomJS 2.1.1 (Windows 8 0.0.0)]: Connected on socket /#JoOdYxAeCS4xvhHHAAAA with id 87859111
PhantomJS 2.1.1 (Windows 8 0.0.0): Executed 1 of 1 SUCCESS (0.009 secs / 0.004 secs)

4.demo2-ES6

安装使用Webpack+Babel

npm i  karma-webpack --save-dev
npm i  babel-loader babel-core babel-preset-es2015 --save-dev

源码src–index2.js

function isNum(num) {
  if (typeof num === 'number') {
    return true;
  } else {
    return false;
  }
}

export {isNum};
// export default isNum;

测试test–index2.js

import {isNum} from '../src/index2';
// import isNum from '../src/index2';

describe('index2.js:', () => {
  it('isNum() should work fine.', () => {
    expect(isNum(1)).toBe(true);
    expect(isNum('1')).toBe(false);
  });
});

修改配置文件karma.conf.js

config.set({
        basePath: '',
        frameworks: ['jasmine'],
        //修改
        files: [
            // 'src/**/*.js',
            'test/**/*.js'
        ],
        exclude: [],
        preprocessors: {
            'test/**/*.js': ['webpack', 'coverage'] //新增
            //coverage为覆盖率测试,这里不再介绍
        },
        reporters: ['progress', 'coverage'],
        // 新增--覆盖率测试
        coverageReporter: {
            type: 'html',
            dir: 'coverage/'
        },
        port: 9876,
        colors: true,
        logLevel: config.LOG_INFO,
        autoWatch: true,
        browsers: ['PhantomJS'],
        singleRun: false,
        concurrency: Infinity,
        //新增
        webpack: {
            module: {
                loaders: [{
                    test: /\.js$/,
                    loader: 'babel',
                    exclude: /node_modules/,
                    query: {
                        presets: ['es2015']
                    }
                }]
            }
        }
    })

参考阅读:
- http://karma-runner.github.io/
- https://github.com/karma-runner/karma
- 前端单元测试之Karma环境搭建

karma-qunit:Karma插件。 QUnit测试框架适配器 业力单位 测试框架的适配器。 安装 最简单的方法是通过运行将karma-qunit保留在package.json作为devDependency npm install karma-qunit --save-dev 配置 在您的karma.conf.js文件的frameworks数组中添加qunit 。 然后,在plugins数组中,添加karma-qunit 。 以下代码显示了默认配置: // karma.conf.js module . exports = function ( config ) { config . set ( { frameworks : [ 'qunit' ] , plugins : [ 'karma-qunit' ] , files : [ '*.js' ] } ) } 您还可以这样传递QUnit.co 立即下载

相关推荐

karma-test:运行Karma测试工具的基本配置

业力测试 运行Karma测试工具的基本配置。 一堆简单的测试来说明Karma可以运行的测试类型。

自动化测试(六)01-js测试执行过程管理工具Karma——Karma简介和工作原理 & Karma的安装和配置

自动化测试(六)01-js测试执行过程管理工具Karma——Karma简介和工作原理 & Karma的安装和配置 测试环境&帮手Karma Karma 是一个基于 Node.js 的 JavaScript 测试执行过程管理工具(Test Runner)。该工具可用于测试所有主流 Web 浏览器,也可以集成到 CI(Continuous integration)工具,还可以和其他代码编辑器一起使用。 Karma 会监控配置文件中所指定的每一个文件,每当文件发生改变,它都会向测试服务器发送信号,

weixin_44867717的博客 2007

AWS 小白书 [1] 全球架构

小白应该知道的 AWS 知识

boshansolo的博客 703

JS测试框架Karma安装使用

1.安装NodeJS 可以在http://nodejs.org/download/ 下载,我下载的是windows版本。   2.安装karma   新建一个目录如:E:\JavaScript\karma   E:\JavaScript\karma>npm install karma --save-dev   E:\JavaScript\karma>npm install...

smallpig的专栏 416

使用 Java + PaddleOCR 实现表格识别,支持导出 HTML 和 Excel(附源码)

使用Java+PaddleOCR快速搭建表格识别系统,无需处理底层模型细节。系统支持表格结构识别和内容识别,可将图片转换为可编辑表格格式。文章提供了完整的实现流程,包括Maven依赖引入、模型下载(包含检测、识别、分类和表格结构模型)及参数配置说明。SmartJavaAI支持多种高性能模型选择,适用于不同应用场景,帮助开发者快速实现表格识别功能。

deng775747758的博客 1473

ESP32-CAM搭建Arduino及简单使用

配置环境 方法一 文件 → 首选项 http://wechat.doit.am/package_esp8266com_index.json https://dl.espressif.com/dl/package_esp32_index.json 工具 → 开发板 → 开发板管理器 等待安装 方法二 https://github.com/espressif/arduino-esp32 Arduino安装目录下,找到hardware文件夹 建立文件夹espressif,然后在里面再建立一个esp32文件夹

Ying的博客 2万+

自动化测试(六)02-js测试执行过程管理工具Karma——karma示例之Karma支持babel、es6、mocha、webpack

自动化测试(六)02-js测试执行过程管理工具Karma——karma示例之Karma支持babel、es6、mocha、webpack karma示例 目标 : babel支持,ES6语法支持 mocha与chai支持 karma与chrome、webpack对接 karma示例目录 说明: Karma对babel支持的,一个可选项:karma-babel-preprocessor,但是: babel and karma-babel-preprocessor only convert ES6 mo

weixin_44867717的博客 605

SIPVicious实战指南:从零开始掌握VoIP渗透测试(Kali Linux环境)

本文为SIPVicious实战指南,详细介绍了在Kali Linux环境下进行VoIP渗透测试的完整流程。从环境准备与工具安装开始,逐步讲解如何使用svmap扫描SIP服务器、svwar枚举PBX分机号,以及svcrack进行密码安全测试,并整合svreport生成报告。旨在帮助安全从业者从零开始,系统掌握这套经典开源工具,在授权范围内有效评估VoIP系统的安全性。

weixin_29327977的博客 535

JS测试工具karma及应用

测试工具 karma:测试结果即时显示。 测试框架 jasmine mocha qunit nodeunit nunit

anneCoder的博客 2518

HAL库:中断处理函数 及 weak弱声明中断回调函数 详解

HAL库中断处理函数 及 weak弱声明中断回调函数

L_Z_J_I的博客 5161

SPI扩展CAN方案:从寄存器配置到多路通信实战

本文详细介绍了SPI扩展CAN方案的实现方法,从寄存器配置到多路通信实战。通过使用MCP2517FD芯片和SPI接口,可低成本扩展多路CAN通道,适用于工业控制领域。文章涵盖硬件设计、寄存器配置、中断优化及性能调优等核心内容,帮助开发者高效解决设备节点过多的问题。

weixin_42657024的博客 362

学习Karma+Jasmine+istanbul+webpack自动化单元测试

学习Karma+Jasmine+istanbul+webpack自动化单元测试

别人的故事,是参考答案,而不是标准答案 1299

【小白深度教程 1.32】手把手教你从多视角图像进行 3D 重建(SfM 算法)

重建的目标是从一组照片中推导场景的几何结构,假设摄像机位置和内部参数是已知的或可以从图像集中猜测。 这是通过使用多个照片,在其中应用运动结构法(Structure from Motion,SfM)来解决像素级对应问题,部分地恢复3D信息来实现的。

2401_87064292的博客 2158

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

由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!点击【学习资料】即可免费领取!后由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!点击【学习资料】即可免费领取![外链图片转存中…(img-Qbj6ruHT-1713781846108)][外链图片转存中…(img-TeZdsqdJ-1713781846109)]

2401_84152223的博客 566

大模型选型实战:为OpenClaw匹配最优“大脑”的全维度考量

大模型不是越贵越好,也不是参数越高越好,适合自己的使用场景才是最好的。按照我的方法,先明确自己的需求,再选对应的模型,配置多模型自动路由,既能保证体验,又能最大限度降低成本。我自己用这套配置用了半年多,不管是写文章、写代码还是处理复杂问题,都完全够用,成本也很低,大家可以参考一下。如果不知道选什么模型,可以在评论区说一下你的使用场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 343

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

前端开发环境与最佳实践

目标 ========================= 标准化、自动化、最优化----以WEB设计取代传统桌面程序界面设计 开发语言:javascript。 ============================ 使用基于标准EMCAscript5的部分。部分领域可使用可编译为JS的变种语言,如coffeeScript等。 版本管理系统 ========

码园老农的专栏 2477

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

单元测试

前端工程师看测试之TDD和BDD Vue.js学习系列六——Vue单元测试Karma+Mocha学习笔记 单元测试断言库:chai.js中文文档 karma配置及使用

水里飞鸟的博客 201

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

appframework单元测试实践:使用Karma和Chai确保代码质量

appframework是一个功能丰富的前端框架,为了保证代码质量和稳定性,项目采用Karma作为测试运行器,结合Chai断言库构建了完善的单元测试体系。本文将详细介绍如何在appframework项目中进行单元测试实践,帮助开发者快速掌握测试流程和最佳实践。 ## 单元测试环境搭建 在appframework项目中,单元测试环境主要由Karma和Chai组成。Karma负责启动浏览器、加载测

gitblog_00264的博客 762

Nothing Private测试策略:Cypress集成测试与Karma单元测试完整解析

Nothing Private是一个旨在证明即使在使用隐私浏览或隐身模式时,用户也可能被追踪的开源项目。本文将详细解析其测试策略,包括Cypress集成测试与Karma单元测试的完整实现方案,帮助开发者全面了解项目的质量保障体系。 ## 测试框架架构概览 Nothing Private项目采用了双测试框架架构,确保前端功能的全面验证: - **Cypress**:负责端到端(E2E)集成测试

gitblog_00728的博客 430

WEB各类常用测试工具

知名的 Java 单元测试工具,由 Facebook 开源,开箱即用。它在最基础层面被设计用于快速、简单地编写地道的 Java 测试,能自动模拟 require() 返回的 CommonJS 模块,并提供了包括内置的测试环境 Dom API 支持、合理的默认值、预处理代码和默认执行并行测试在内的特性。通过在并行进程中同时运行测试,让测试更快地结束

自动化测试技术栈 654

前端开发与自动化单元测试趋势

时至今日,Web 前端已经发生了巨大的演变,而单页应用程序也成为了标准。众多应用程序完成了从 PC 到移动端的华丽转身,而那些基于 JavaScript 的框架变得更受开发者们欢迎。 TestProject 进行了一项调查,以便了解目前前端开发技术和自动化单元测试的趋势。调查的结果揭示了...

chjh568774682的博客 172

什么是单元测试

测试是什么 为检测特定的目标是否符合标准而采用专用的工具或者方法进行验证,并最终得出特定的结果。 二:单元测试的意义 对于现在的前端工程,一个标准完整的项目,测试是非常有必要的。很多时候我们只是完成了项目而忽略了项目测试的部分,测试的意义主要在于下面几点: 1. TDD(测试驱动开发) 被证明是有效的软件编写原则,它能覆盖更多的功能接口。 2. 快速反馈你的功能输出...

heima201907的博客 484

六大前端自动化测试框架推荐,提升你的开发效率与质量

介绍:Enzyme是一个专门用于React组件测试的JavaScript测试工具库,提供三种不同类型的渲染器以满足不同层次的测试需求。介绍:React Testing Library是专为React组件设计的测试工具库,它强调以用户为中心的测试方式,鼓励开发者编写更贴近实际使用场景的测试。开源的一款功能全面的JavaScript测试框架,尤其适用于React应用程序的测试。使用场景:适用于Web应用程序的单元测试、集成测试和端到端测试。使用场景:适用于Web应用程序的端到端测试、集成测试和验收测试。

OKCRoss的博客 4692

jasmine+karma 自动化单元测试

测试的必须性 相信大家都知道测试的必要性,测试先行的概念。不过,写了这么多年的代码,除了之前用java的时候写过一些测试用例,还真的很少写过前端的测试用例,或者做一些自动化测试。感觉做单元测试还是很有必须的,它能帮助你整理思路,换个角度思考问题,发现bug。最近正好研究一下,之前了解到jasmine是做js单元测试的利器,karma是用来自动化运行分析统计单元测试的,结合karma-covera...

weixin_30772261的博客 191

使用karma测试平时写的小demo(arguments为例)

有人说前端自动化测试非常困难,我觉得确实如此。在项目中,我个人也不放心写的测试,还是要手动测试。但是我们平时写demo学习时,完全可以使用自动化测试。 传统demo 1,新建一个html 2,写入js脚本 3,运行html 平时写demo,大家伙恐怕都是这个步骤吧,其实我们可以使用k...

chuanhang3897的博客 284
上一篇: 前端自动化测试工具PhantomJS+CasperJS结合使用教程
下一篇: 动手DIY一个underscorejs库及underscorejs源码分析1
TechFE
博客等级 码龄12年 177粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值