• Js测试框架学习笔记(一)


    什么时候使用Karma?

    在真实浏览器里测试。
    在多种浏览器里进行测试(包括桌面、移动)。
    在本地开发环境执行测试。
    想在持续集成CI内运行测试。
    想在每次保存代码时,自动执行测试。
    热衷于terminal小黑屏。
    不想陷入令人厌烦的测试生活。
    想使用Istanbul自动生成coverage报告。
    想在源码中使用RequireJS。
    

    Karma:

    Karma一直作为一个Test Runner而存在的,只是用来测试的框架。不过到目前为止,它支持以下流行的测试框架。

    Mocha
    Jasmine
    QUnit
    

    Karma对各种Test Framework的支持是以插件的模式进行支持的

    创建一个test文件夹,用于存放自己写的单元测试代码。

    Mocha:

    Mocha 既是测试框架,也是一个测试 runner ,它主要用在 Node.js里的单元测试,当然也可以用在浏览器端,不过得手动配置各种适配脚本。
    所谓”测试框架”,就是运行测试的工具。通过它,可以为JavaScript应用添加测试,从而保证代码的质量。
    测试脚本里面应该包括一个或多个describe块,每个describe块应该包括一个或多个it块。

    describe块称为”测试套件”(test suite),表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称(”加法函数的测试”),第二个参数是一个实际执行的函数。
    it块称为”测试用例”(test case),表示一个单独的测试,是测试的最小单位。它也是一个函数,第一个参数是测试用例的名称(”1 加 1 应该等于”2”),第二个参数是一个实际执行的函数。
    一个describe是一个it的集合。describe包含n个it,一个it包含n个判断断言

    var expect = require('chai').expect;
    //上面代码引入的断言库是chai,并且指定使用它的expect断言风格。

    expect断言的优点是很接近自然语言
    基本上,expect断言的写法都是一样的。头部是expect方法,尾部是断言方法,比如equal、a/an、ok、match等。两者之间使用to或to.be连接。
    如果expect断言不成立,就会抛出一个错误。事实上,只要不抛出错误,测试用例就算通过。

    如果测试脚本是用ES6写的,那么运行测试之前,需要先用Babel转码。
    Mocha默认每个测试用例最多执行2000毫秒,如果到时没有得到结果,就报错。对于涉及异步操作的测试用例,这个时间往往是不够的,需要用-t或–timeout参数指定超时门槛。
    另外,Mocha内置对Promise的支持,允许直接返回Promise,等到它的状态改变,再执行断言,而不用显式调用done方法。
    Mocha在describe块之中,提供测试用例的四个钩子:before()、after()、beforeEach()和afterEach()。它们会在指定时间执行。

    
    describe('hooks', function() {
    
      before(function() {
        // 在本区块的所有测试用例之前执行
      });
    
      after(function() {
        // 在本区块的所有测试用例之后执行
      });
    ∏
      beforeEach(function() {
        // 在本区块的每个测试用例之前执行
      });
    
      afterEach(function() {
        // 在本区块的每个测试用例之后执行
      });
    
      // test cases
    });

    chai

    chai是一套TDD(测试驱动开发)/BDD(行为驱动开发)的断言框架
    所谓”断言”,就是判断源码的实际执行结果与预期结果是否一致,如果不一致就抛出一个错误。
    所有的测试用例(it块)都应该含有一句或多句的断言。它是编写测试用例的关键。断言功能由断言库来实现,Mocha本身不带断言库,所以必须先引入断言库

    包含有3个断言库支持BDD风格的expect/should和TDD风格的assert,
    ,expect/should库都支持链式调用,有如下的链式API,多部分都是英文的介词和be动词,可以用来做谓语

    to
    be
    been
    is
    that
    and
    has
    have
    with
    at
    of
    same
    not 跟在链式调用后面的否定断言
    

    Sinon

    mock更侧重与是测试代码是否作出了行为,最终mock.verify()的调用会验证所有的期望是否符合.

  • 相关阅读:
    C++面向对象三大特性
    4G通信技术LTE介绍
    汉澳战斗檄文,跟着汉澳去战斗
    AdapterView及其子类之二:使用ListActivity及ArrayAdapter创建列表
    [置顶] Objective-C ,ios,iphone开发基础:protocol 协议(委托,代理)的声明
    C语言中几种类型所占字节数
    UART, SPI, IIC的详解及三者的区别和联系
    数学基础详解 2——概率论与数理统计
    1—机器学习简介
    Python基础(11)——反射、异常处理
  • 原文地址:https://www.cnblogs.com/xihe/p/6138600.html
Copyright © 2020-2023  润新知