前端测试-大酱的冬季前端之旅第一游

从这周开始,每周至少完成一篇分享~每周周六睡前完成本周的初步读文章分享,下周四睡前将上周的大问题修改完毕,将深刻理解的知识补充完~一定要坚持下去~也希望自己能够深刻理解每一个内容,如果大家发现文章中的问题或者有好的建议可直接留言,有好的相关文章也欢迎发给我~一起加油吧!


1.node assert

node-assert函数分组讲解

node中文api文档

断言是编程术语,表示为一些布尔表达式,程序员相信在程序中的某个特定点该表达式值为真,可以在任何时候启用和禁用断言验证,因此可以在测试时启用断言而在部署时禁用断言。assert主要是用于有肯定结果的测试。

主要函数

assert(value, message), assert.ok(value, [message]) //判断中值是否为true

assert.ifError(value) //测试值是否不为 false,当为 true 时抛出。常用于回调中第一个 error 参数的检查。

assert.fail(actual, expected, message, operator) //抛出异常,有message时显示  message,没有使用operator作为为分隔符

assert.equal(actual, expected, [message]) //("=="判断)是否相等

assert.notEqual(actual, expected, [message]) //("=="判断)是否不相等

assert.strictEqual(actual, expected, [message]) //("==="判断)是否相等 相反:notStrictEqual

assert.deepEqual(actual, expected[, message]) // 是否深度匹配 

assert.notDeepEqual(actual, expected[, message]) // 是否深度匹配

assert.throws(block, [error], [message]) //声明一个block用于抛出错误,'error'可以是构造函数,验证函数或者正则表达式

assert.doesNotThrow(block, [message])//声明模块不抛出错误

2.ATDD,TDD,BDD

ATDD,TDD,BDD的区别

单元测试,BDD,TDD

TDD(测试驱动开发)

TDD指的是Test Drive Development,很明显的意思是测试驱动开发,也就是说我们可以从测试的角度来检验整个项目。大概的流程是先针对每个功能点抽象出接口代码,然后编写单元测试代码,接下来实现接口,运行单元测试代码,循环此过程,直到整个单元测试都通过。这一点和敏捷开发有类似之处。

BDD(行为驱动开发)

BDD指的是Behavior Drive Development,也就是行为驱动开发。BDD用自然语言来描述,让开发、测试、BA以及客户都能在这个基础上达成一致。因为测试优先的概念并不是每个人都能接受的,可能有人觉得系统太复杂而难以测试,有人认为不存在的东西无法测试。所以,我们在这里试图转换一种观念,那便是考虑它的行为,也就是说它应该如何运行,然后抽象出能达成共识的规范。

3.mocha(音:摩卡)

mocha是一款功能丰富的javascript单元测试框架,它既可以运行在nodejs环境中,也可以运行在浏览器环境中。mocha会串行地执行我们编写的测试用例,可以在将未捕获的异常映射到对应测试用例(?这里是指的哪部分)的同时,保证输出灵活准确的测试结果。

阮一峰mocha+chai(断言库)教程

mocha官网

mocha详解

mocha会生成一个包在最外面的describe函数

同步代码测试

var assert = require('chai').assert;     //断言模块chai中的assert风格
describe('用例集描述string', function() {    // "测试套件"test suite),表示一组相关的测试
    it('用例的描述string', function() {   //it为一个测试用例,用例通过后会在描述前打勾
      // function为用例的内容
      assert.equal(-1, [1,2,3].indexOf(5));
      assert.equal(-1, [1,2,3].indexOf(0));
    });
});复制代码

异步代码测试

callback:x

describe('User', function() {
  describe('#save()', function() {
    it('should save without error', function(done) {
      var user = new User('Luna');
      user.save(function(err) {
        if (err) throw err;       //判断用例执行成功与否是在异步代码的回调里边完成的
        done();                    // 通知Mocha测试结束

        /* user.save(done);  // 异步代码中逻辑错误时,会在回调中抛出一个错误,直接这样写即可 */复制代码
      });
    });
  });
});复制代码

promise:  让用例函数返回一个promise对象来进行正确性判断

不建议使用箭头函数~~

钩子函数 (下面4种)

describe('hooks', function() {

  before('可选:描述string',function [funName可选] () {
    // runs before all tests in this block
  });

  after(function() {
    // runs after all tests in this block
  });

  beforeEach(function() {
    // runs before each test in this block
  });

  afterEach(function() {
    // runs after each test in this block
  });

  // test cases
});复制代码

如果在用例集函数之外定义钩子函数,那么这个钩子函数将会对所有的mocha单元测试用例生效。

常用方法

describe.only()/it.only() :  只执行此用例集或用例

describe.skip()/it.skip():跳过此用例集或用例的执行,跳过的用例会被标记为pending的用例

 this.skip();: 调用skip函数跳过此用例

this.retries();:重新执行用例(会重新运行用例函数的beforeEach和afterEach钩子函数)

 this.slow(num);:标记耗费num时间认为执行耗时过长

 this.timeout(500):定义用例、用例集、钩子函数超时时间,如果嵌套的用例集或者用例重写了timeout时间,则会覆盖上层的设置。通过this.timeout(0),可以关掉用例或用例集的超时判断。

mocha.setup('bdd'): 设置接口类型

 mocha.run(); :  测试脚本加载完之后用mocha.run()函数来运行测试

常用命令

mocha init: 生成一个浏览器中单元测试的架子

mocha --delay: 在全局环境中生成一个run函数,延迟工作完成后调用run函数run()即可启动测试。

mocha命令的基本格式是:mocha [debug] [options] [files]

测试接口类型

mocha的测试接口类型指的是集中测试用例组织模式的选择,包括BDD行为驱动开发(Behavior Driven Development),TDD测试驱动开发(Test-Driven Development),Exports,QUnit 和 Require-style 几种

BDD(默认的测试接口)

BDD测试接口提供 describe(), context(), it(), specify(), before(), after(), beforeEach(), 和 afterEach()几种函数,其中context函数只是describe函数的别名,specify函数也是if函数的别名。

TDD

TDD接口提供 suite(), test(), suiteSetup(), suiteTeardown(), setup(), 和 teardown()函数

额外补充知识点(读取文件时用到) :

  bash通配符(node通配符)【eg:$ mocha 'test/**/*.@(js|jsx)'  需加单引号】


shell通配符

  通配符     意义

  *         匹配0任意多个字符(包括零个或一个)
  ?         匹配任意一个字符(不包括零个)
  [characters]    匹配任意一个属于字符集中的字符
  [!characters]    匹配任意一个不是字符集中的字符
  [[:class:]]     匹配任意一个属于指定字符类中的字符

  

   字符类         意义

  [:alnum:]      匹配任意一个字母或数字
  [:alpha:]       匹配任意一个字母
  [:digit:]       匹配任意一个数字
  [:lower:]      匹配任意一个小写字母
  [:upper]       匹配任意一个大写字母

4.should.js

should.js语法

api英文文档

shouldjs是一个BDD测试断言库,它包装了assert,改变了书写风格,扩展了Object.prototype,额外提供了".should"语法。一旦引入了should,即“var should = require('should');”,那么当前js文件内的所有继承至Object的对象都可以.should:

目标对象.should.xxxx复制代码

如果目标对象没有继承至Object,那就换一种方式使用:

  should(目标对象).xxx复制代码

或者

 should.xxxxx(目标对象);复制代码

should库需要额外安装:$ npm install should --save-dev

浏览器端将should包下的should.js引入到前台页面,即可和后端一样使用。

静态方法

should提供了一系列的静态方法,这些方法可以对非Object对象使用。它们和assert的基本方法其实是一样的。具体api看上面链接。

Assertions 断言

每一个should断言都返回一个被should.js包装过的对象,所以他可以形成链式语法,但是有一些断言,比如.length,.property 等将被断言的对象改变成了其属性值。 

而且在“链”中,可以使用下面等方便理解的词,这些词其实对should的断言一点实际影响都没有,注意,没有.or

.an, .of, .a, .and, .be, .have, .w ith, .is, .which.

5.自动化测试工具karma

karma的设计分析以及与其他框架对比

Karma中文配置API

karma入门操作(yarn)

karma就是把我们测试过程中编写的测试用例,通过它调用浏览器来运行这些测试用例,然后再汇集测试结果,生成测试报告。可以选择各类测试框架(mocha、Jasmine 等)。

6.Travis CI

官网

travis自动构建nodejs项目实战

Travis-ci是一款持续集成(Continuous Integration)服务,它能够很好地与Github结合,每当代码更新时自动地触发集成过程。

配置.travis.yml文件,在travis官网上开启自动构建,则可以简单地开始某一项目的自动构建



转载于:https://juejin.im/post/5bd7f9716fb9a05cfb3e0235

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值