关于前端测试的一些总结

第二周的课已经上完了,接触了之前没有使用过的单元测试模块。老师从上这节课的目的到每种测试方法一一展开。

课程目的,学习方法

1. 面试也是有技巧需要锻炼的,它有自己的一套方法论。循序渐进,不要在脑海里深深的恐惧(对自己说的)。
2. 知行合一。了解一个知识点不能仅仅停留看过的书和文章上,需要自己动手实践。
3. 现在我们大部分人遇到的问题是不够深入。不知道原理,场景如何做选择。技术选型,你得知道优缺点,用哪种方案做选择。考虑到快速实施,如何对服务器减压,大量并发的情况,稳定性以及性能
4.如何通过本课程get到更多知识技能。

研究原理,源码(个人觉得有自己使用场景的时候在去琢磨这件事,不能为了研究而研究),通过笔记,博客来跟踪自己的学习。


测试用例:

一般测试分为两类,ui测试和数据测试。我们前端开发人员一般使用数据测试。通过测试可以提升代码质量和改进错误的检测方式。


常见的测试有两大类:TDD(测试驱动开发),BDD(行为驱动开发)

TDD主要思想:

1.定义一个单元测试
2.执行这个单元测试
3.验证这个测试是否通过
(先写测试,再写实现代码,然后不停的迭代重构,循环)主要是为了给开发人员自己看的,让程序员对自己写的代码做到实时校验。

BDD:
就是先写需求功能点描述,这种描述客户,经理,开发,测试都能看懂,即使没有写过任何代码的人都能看懂,而且是基于文本的。是从业务需求的角度除服需要哪些单元测试。

Mocha:
Mocha是非常强大和广泛应用的测试框架。
上面这段代码,就是测试脚本,它可以独立执行。测试脚本里面应该包括一个或多个describe块,每个describe块应该包括一个或多个it块。

var add = require('./add.js');
var expect = require('chai').expect;
describe('加法函数的测试', function() {
  it('1 加 1 应该等于 2', function() {
    expect(add(1, 1)).to.be.equal(2);
  });});
describe块称为"测试套件"(test suite),表示一组相关的测试。它是一个函数,第一个参数是测试套件的名称("加法函数的测试"),第二个参数是一个实际执行的函数。

it块称为"测试用例"(test case),表示一个单独的测试,是测试的最小单位。它也是一个函数,第一个参数是测试用例的名称("1 加 1 应该等于 2"),第二个参数是一个实际执行的函数。

具体参考:
http://www.ruanyifeng.com/blog/2015/12/a-mocha-tutorial-of-examples.html


需要测试的文件需要放在test文件夹下,如果不放的话需要在mocha.opts里做下配置


Mocha在describe块之中,提供测试用例的四个钩子:before()、after()、beforeEach()和afterEach()。它们会在指定时间执行。


describe('hooks', function() {
  before(function() {
    // 在本区块的所有测试用例之前执行
  });
  after(function() {
    // 在本区块的所有测试用例之后执行
  });
  beforeEach(function() {
    // 在本区块的每个测试用例之前执行
  });
  afterEach(function() {
    // 在本区块的每个测试用例之后执行
  });
 });
对于异步测试,Mocha默认每个测试用例最多执行2000毫秒,如果到时没有得到结果,就报错。对于涉及异步操作的测试用例,这个时间往往是不够的,需要用-t或--timeout参数指定超时门槛。

it('测试应该5000毫秒后结束', function(done) {
  var x = true;
  var f = function() {
    x = false;
    expect(x).to.be.not.ok;
    done(); // 通知Mocha测试结束  };
  setTimeout(f, 4000);})

 $ mocha -t 5000 timeout.test.js
it块执行的时候,传入一个done参数,当测试结束的时候,必须显式调用这个函数,告诉Mocha测试结束了。否则,Mocha就无法知道,测试是否结束,会一直等到超时报错。


另外,Mocha内置对Promise的支持,允许直接返回Promise,等到它的状态改变,再执行断言,而不用显式调用done方法.


Assert 库是Node.js的核心一部分,assert 模块提供了断言测试的函数。


常用api有(详细参照: http://nodejs.cn/api/assert.html#assert_assert_throws_block_error_message)
assert.ok
assert.equal
assert.strictEqual
assert.deepEqual
assert.throws
Shoud.js
功能都是做断言测试,详细api 参照 https://github.com/tj/should.js

Karma测试


Karma主要做了两点
1.Karma可以启动多个浏览器,加载并执行指定路径下的javascript代码
2.Karma能够自动监控指定路径下javascript代码的变化。一旦变化,自动加载执行。

通过node安装karma, 然后karma init  进行相关的配置

Travis ci

Travis CI 提供的是持续集成服务(Continuous Integration,简称 CI)。它绑定 Github 上面的项目,只要有新的代码,就会自动抓取。然后,提供一个运行环境,执行测试,完成构建,还能部署到服务器。

持续集成指的是只要代码有变更,就自动运行构建和测试,反馈运行结果。确保符合预期以后,再将新代码"集成"到主干。

持续集成的好处在于,每次代码的小幅变更,就能看到运行结果,从而不断累积小的变更,而不是在开发周期结束时,一下子合并一大块代码。

需要做相关配置:

详见: http://www.ruanyifeng.com/blog/2017/12/travis_ci_tutorial.html

你可能感兴趣的:(个人总结)