- Objective: - Breadcrumb: node.js # 概念阐释 ## 语义 `assert` 断言,用来检查代码的行为是否符合预期 ## 语法 #### 导入assert模块 ```js const assert = require('assert'); ``` #### `assert.ok()` 检查一个值是否为truth,用[[js condition Comparison Operators 比较操作符]]来判断,可以测试> < === >= <=,也可以通过宽松相等的测试 == ,为`truth`则pass测试,为`false`则不通过测试。 输出2种结果:error或noting ```js assert.ok(4 == '4'); //pass ``` #### `assert.equal(a,b)` 测试两个值是否相等,它使用的是宽松相等 == ,**数据类型不同**时不会报错。*总是使用`assert.strictEqual()`代替`assert.equal()`* ```js const assert = require('assert'); const sum = require('./sum'); describe('Sum function', function() { it('should return 4 when adding 2 and 2', function() { assert.equal(sum(2, 2), 4); }); it('should return 0 when no arguments are passed', function() { assert.equal(sum(), 0); }); }); ``` #### 相等的情况下的不同写法 ```js assert.ok(result == expect); assert.equal(result,expect); ``` #### `assert.strictEqual(a,b)` 会检查数据类型,相当于=== #### `assert.deepEqual(a,b)` - 检查对象Object中,每个对象值的宽松相等== - 数组也是对象,所以也可以检查数组的宽松相等== - 对「对象」和「数组」使用其它断言会报错 ```js const arr1 = [1, 2, 3]; const arr2 = [1, 2, 3]; const arr3 = [1, 2, '3']; assert.deepEqual(arr1, arr2); // No error assert.deepEqual(arr1, arr3); // No error ``` #### `assert.throw()` 如果测试案例符合实现代码条件则通过测试,不符合则抛出错误 ```js it('throws an error if passed a number less than 0', () => { assert.throws( ()=>{ Rooster.timeAtDawn(-1); }, RangeError ); }); ``` # 实例 # 相关内容 # 问题 1. 写一个`describe...it`代码块,并检查3+4是否等于7 # 问题答案 ```js // import assert here const assert = require('assert'); describe('+', () => { it('returns the sum of its arguments', () => { // Write assertion here assert.ok(3+4===7); }); }); ``` # 参考资料 - [断言参考文档 - Node.js](https://nodejs.org/api/assert.html)