这不是一篇chai的API文档,也不会讲的很深(我也是初学者,资历不够),只是为初学者想学习chai做铺垫而已!
更深入的学习点这里:
chai API
新手指南
TDD:测试驱动开发(Test-Driven Development)测试驱动开发是敏捷开发中的一项核心实践和技术,也是一种设计方法论。TDD的原理是在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代码。TDD的基本思路就是通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。TDD首先考虑使用需求(对象、功能、过程、接口等),主要是编写测试用例框架对功能的过程和接口进行设计,而测试框架可以持续进行验证。
BDD:行为驱动开发(Behavior Driven Development)行为驱动开发是一种敏捷软件开发的技术,它鼓励软件项目中的开发者、QA和非技术人员或商业参与者之间的协作。主要是从用户的需求出发,强调系统行为。BDD最初是由Dan North在2003年命名,它包括验收测试和客户测试驱动等的极限编程的实践,作为对测试驱动开发的回应。
有三种常用的方式:assert|expect|should
var chai = require('chai');
var assert = chai.assert;
var expect = chai.expect;
var should = chai.should();
var foo = 'bar'
, beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
assert.typeOf(foo, 'string'); // without optional message
assert.typeOf(foo, 'string', 'foo is a string'); // with optional message
assert.equal(foo, 'bar', 'foo equal `bar`');
assert.lengthOf(foo, 3, 'foo`s value has a length of 3');
assert.lengthOf(beverages.tea, 3, 'beverages has 3 types of tea');
在所有情况下,断言样式允许您将可选消息作为断言语句中的最后一个参数。如果您的断言不通过,这些将包含在错误消息中。
assert.equal(1, 2, '1不等于2');
BDD样式有两种风格:expect和should。两者都使用相同的可链语言来构造断言,但是它们在最初构造断言的方式上有所不同。在should的情况下,也有一些警告和附加的工具来克服这些警告。
var expect = require('chai').expect
, foo = 'bar'
, beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
expect(foo).to.be.a('string');
expect(foo).to.equal('bar');
expect(foo).to.have.lengthOf(3);
expect(beverages).to.have.property('tea').with.lengthOf(3);
Expect还允许您将任意消息包含到可能出现的任何失败的断言中
var answer = 43;
expect(answer, 'topic [answer]').to.equal(43);
should样式与expect都一样使用链式断言,但是should对每个对象来增加了一个属性扩展。 在IE中这种风格有一些问题,should有浏览器兼容性问题。
var should = require('chai').should() //actually call the function
, foo = 'bar'
, beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
foo.should.be.a('string');
foo.should.equal('bar');
foo.should.have.lengthOf(3);
beverages.should.have.property('tea').with.lengthOf(3);
varfoo = 'bar';
foo.should.be.a('Object');
expect(beverages).to.have.property('tea').with.lengthOf(3);
beverages.should.have.property('tea').with.lengthOf(3);
在开始看chai的API是有几个疑问:
1、什么是TDD和BDD?
2、有assert|expect|should三个怎么用,有什么区别,应该用那个好?