zoukankan      html  css  js  c++  java
  • 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()的调用会验证所有的期望是否符合.

  • 相关阅读:
    抽象代数学习笔记
    WC2021 游记
    简单的数学题
    前缀和公式
    杜教筛
    [模板]BZOJ4756线段树合并
    SPOJ 694
    bzoj1367 可并堆
    莫比乌斯反演(理论)
    es6 Set数据结构
  • 原文地址:https://www.cnblogs.com/xihe/p/6138600.html
Copyright © 2011-2022 走看看