- 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)