测试工具: - mocha & chai (断言库) - jest (vue 主推) ## :-: mocha ``` // 测试文件要放到 test/unit/ 文件夹下、 // 测试文件必须以 xxx.spec.js 结尾、或 xxx.test.js // npm run test:unit // 引入测试工具 import { expect } from 'chai'; // 测试用例 it('-- test 单元', () => { // 断言 // 判断相等 expect(123).to.be.equal(123); // 基本类型 // deep -- 可以让其后的断言不是比较对象本身,而是递归比较对象的键值对、 expect({ abc: 123 }).to.be.deep.equal({ abc: 123 }); // 引用值 expect({ abc: 123 }).to.be.eql({ abc: 123 }); // 引用值(简写) // 判断不等 expect(2).to.be.not.equal(1); // 判断大于 expect(10).to.be.above(5); expect(10).to.be.greaterThan(5); // 判断小于 expect(5).to.be.below(10); expect(5).to.be.lessThan(10); // 判断大于等于 expect(10).to.be.at.least(10); expect(10).to.be.not.lessThan(10); // 判断小于等于 expect(5).to.be.at.most(5); expect(5).to.be.not.greaterThan(5); // 判断长度 expect([1, 2, 3]).to.be.lengthOf(3); // 判断为truthy,(真值:除了false、undefined、null、正负0、NaN、''的值) expect(1).to.be.ok; // 判断为true、false、null、undefined、NaN expect(true).to.be.true; expect(false).to.be.false; expect(null).to.be.null; expect(undefined).to.be.undefined; expect(NaN).to.be.NaN; // 判断包含 expect('xxxxx').to.be.include('x'); // 包含 expect('xxxxx').to.be.contain('x'); // 包含 expect('xxxxx').to.be.match(/x/); // 正则匹配 // --------------------------------------- // expect().to.be.equal() // expect({}).to.be.equal({}) // 断言失败 // deep -- 可以让其后的断言不是比较对象本身,而是递归比较对象的键值对、 expect({}).to.be.deep.equal({}); // deep的简写 ( expect(xxx).to.be.deep.equal(xxx) ) expect({}).to.be.eql({}); }); ``` :-: xxx.spec.js ``` const abs = num => { if (typeof(num) !== 'number') return NaN; if (num < 0) return -num; return num; }, add = (...rest) => rest.reduce((prev, next) => { return prev + next; }); export { abs, add }; ``` ``` // 测试文件要放到 test/unit/ 文件夹下、 // 测试文件必须以 xxx.spec.js 结尾、或 xxx.test.js // npm run test:unit // 引入测试工具 import { expect } from 'chai'; // 引入要测试的组件 import { abs, add } from '@/xxx.js'; // describe -- 分组(套件) describe('abs函数', () => { it('正数', () => { expect(abs(123)).to.be.equal(123); }); it('负数', () => { expect(abs(-321)).to.be.equal(321); }); it('0', () => { expect(abs(0)).to.be.equal(0); expect(abs(-0)).to.be.equal(0); }); it('传入非数返回NaN', () => { expect(abs('')).to.be.eql(NaN); expect(abs(null)).to.be.eql(NaN); expect(abs(undefined)).to.be.eql(NaN); expect(abs([])).to.be.eql(NaN); expect(abs({})).to.be.eql(NaN); expect(abs(true)).to.be.eql(NaN); expect(abs(false)).to.be.eql(NaN); expect(abs(NaN)).to.be.eql(NaN); }); }); // describe -- 分组(套件) describe('add函数', () => { it('求和', () => { expect(add(1, 2, 3, 4)).to.be.equal(10); }); }); /* MOCHA Testing... √ -- test 单元 abs函数 √ 正数 √ 负数 √ 0 √ 传入非数返回NaN add函数 √ 求和 6 passing (444ms) MOCHA Tests completed successfully */ ```