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

前面我写了一篇博客是《前端自动化测试工具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环境搭建

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: JavaScript 前端工程化是一种使用工具和流程来提高前端开发效率和质量的方法。它可以帮助我们管理项目构建、模块化、测试、部署等流程,使前端开发更加高效和可维护。 一些常用的前端工程化工具包括: - 包管理器:如 npm 或 yarn,用于管理项目依赖的第三方库和工具。 - 构建工具:如 Webpack 或 Rollup,用于将源代码转换为浏览器可以运行的代码,并且可以做一些优化,如代码压缩、模块化、自动添加浏览器前缀等。 - 自动化测试工具:如 Jest、Mocha 或 Karma,用于自动执行单元测试和集成测试,保证代码的质量和稳定性。 - 部署工具:如 Git、Jenkins 等,用于将项目发布到线上环境。 前端工程化还可以通过使用规范和框架来提高代码质量和团队协作效率。例如,使用 lint 工具来检查代码规范,使用框架如 React、Vue 或 Angular 来组织代码结构。 总之,JavaScript 前端工程化是一种使用工具和流程来提高前端开发效率和质 ### 回答2: JavaScript 前端工程化是一种通过工具和实践来提高前端开发效率和质量的方法。它涉及到对代码、资源和工作流程的管理和优化,旨在满足在复杂的前端项目中面临的挑战。 首先,JavaScript 前端工程化通过模块化来组织和管理代码。使用模块化的方式可以将代码分割成独立的模块,各模块之间可以互相依赖和复用。这样可以提供更好的代码可维护性和复用性,同时也可以避免全局命名冲突和代码碎片化的问题。常用的模块化技术包括 ES6 的模块化语法和模块打包工具,如Webpack。 其次,JavaScript 前端工程化通过自动化构建工具来提高开发效率。通过使用构建工具,我们可以自动完成编译、压缩、合并等繁琐的操作,减少手动操作的时间和错误。常见的构建工具有Grunt、Gulp和Webpack,它们可以根据配置文件自动执行各种任务,并生成优化后的静态文件。 另外,JavaScript 前端工程化还涉及到代码规范和质量保证。通过使用代码规范工具如ESLint,并制定团队统一的代码规范,可以提高团队协作的效率,减少潜在的问题。同时,结合自动化测试工具如Jest、Mocha等,可以实现代码的自动化测试,确保代码质量和稳定性。 最后,JavaScript 前端工程化还可以提供更好的代码部署和发布机制。通过使用持续集成工具如Jenkins,可以自动部署代码到测试和生产环境,提高交付速度和稳定性。同时,还可以使用版本控制工具如Git,实现多人协作和代码版本管理。 总之,JavaScript 前端工程化通过模块化、自动化构建、代码规范和质量保证、代码部署等方式来提高前端开发效率和质量。在现代化的前端开发中,工程化已经成为不可或缺的组成部分,帮助开发者应对复杂的需求和挑战。 ### 回答3: JavaScript前端工程化是一种以提高开发效率、代码质量和项目可维护性为目标的开发方法。它借助工具和规范化的工作流程,帮助开发人员更好地组织、管理和部署JavaScript代码。 前端工程化的核心是模块化。通过使用模块化开发,前端代码可以按照功能进行划分,每个功能模块都拥有独立的代码和依赖关系,使得开发和维护变得更加容易。常用的模块化规范有CommonJS和ES6模块。 另一个关键概念是构建工具。构建工具可以帮助自动化完成一系列任务,如代码合并、压缩、转换、静态资源管理等。常用的构建工具有Webpack和Rollup。这些工具可以根据配置文件自动处理代码,减少手动操作,提高开发效率。 除此之外,前端工程化还包括自动化测试、性能优化和代码规范等方面。自动化测试可以帮助开发人员编写和运行测试用例,确保代码的正确性。性能优化可以通过压缩代码、懒加载和CDN加速等方式提高页面性能。代码规范则可以统一代码风格,提高代码的可读性和可维护性。 总的来说,JavaScript前端工程化是一种通过使用模块化、构建工具自动化测试等方法,提高前端代码开发效率和质量的开发方法。它可以帮助开发人员更好地组织和管理代码,减少手动操作,提高开发效率和项目可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值