Notes
  • 速记
  • 前端面试
  • HTML / CSS
    • HTML
    • CSS
    • CSS Modules
      • CSS Modules
        • CSS Modules Usage
      • Stylus
      • Nunjucks
  • Javascript
    • 正则表达式
    • 代理(Proxy)和反射(Reflection)
    • 类型转换
    • 按位操作
    • 数据可视化
    • 数据采集
      • 无(全)埋点
      • 模块曝光事件
    • package
      • axios
    • Event Loop
    • React
      • React热身
      • VDOM和DOM-diff
    • Vue
    • Omi
    • MVVM
    • 百度小程序
    • AST抽象语法树
    • ServiceWorker
    • WebSocket
  • NodeJS
    • Assert 断言
    • chai.js 断言库
    • Node Global Obj And Var
    • CLI Writed By Nodejs
    • Framework
      • Hapi Js Framework
    • Electrode JS
      • Electrode Platform
      • Electrode Question
    • Redux
      • Redux Basic Usage
      • Middleware And Asynchronous
      • React-Redux 的用法
    • NPM
      • package.json
      • semver
    • Webpack
      • 编写插件
    • 同构渲染
    • 调用DLL
  • 服务端
    • Inotify
    • Linux
    • Nginx
      • Nginx简介
      • Nginx原理、安装预配置
    • TCP/IP 协议
    • HTTP 协议
      • 基础概念篇
      • 协议详解篇
    • Process
      • 阻塞与非阻塞
      • 进程与线程优性能
  • 数据库
    • GraphQL
  • 移动端
  • 微信小程序
    • 微信小程序安装(linux)
    • 小程序第三方框架
  • 开发工具
    • 开发工具安装
    • Vim Command Collection
    • Git
      • Git Rule
      • Git Submodule
      • gitignore
    • Lerna
    • Ubuntu开发环境安装
  • 运维测试
    • Docker
      • Docker Synopsis
      • docker.sock
    • Nightwatch
    • Jest
  • 算法/数学/架构
    • 设计模式
    • 架构设计经验分享
    • 前端架构
    • 基本数据结构
    • 函数式编程
  • 软件工程
    • 软件生命周期
Powered by GitBook
On this page
  • assert 断言
  • 注意事项

Was this helpful?

  1. NodeJS

Assert 断言

assert 断言

assert 模块提供了断言测试的函数,用于测试不变式。

  1. assert(value[,message]) assert.ok()的别名。

  2. assert.deepEqual(actual, expected[, message]) 测试 actual 参数与 expected 参数是否深度相等。原始值使用相等运算符 (==) 比较。

    只测试可枚举的自身属性,不测试对象的原型、连接符、或不可枚举的属性(这些情况使用 assert.deepStrictEqual())。

    // 不会跑出 AssertionError,因为 RegExp 对象的属性不是可枚举的
    assert.deepEqual(/a/gi, new Date());

    Map 和 Set 包含的自相也会被测试。 子对象中可枚举的自身属性也会被测试:

    const assert = require('assert');
    
    const obj1 = {
     a: {
       b: 1
     }
    };
    const obj2 = {
     a: {
       b: 2
     }
    };
    const obj3 = {
     a: {
       b: 1
     }
    };
    const obj4 = Object.create(obj1);
    
    assert.deepEqual(obj1, obj1);
    // 测试通过,对象与自身相等。
    
    assert.deepEqual(obj1, obj2);
    // 抛出 AssertionError: { a: { b: 1 } } deepEqual { a: { b: 2 } }
    // 因为 b 属性的值不同。
    
    assert.deepEqual(obj1, obj3);
    // 测试通过,两个对象相等。
    
    assert.deepEqual(obj1, obj4);
    // 抛出 AssertionError: { a: { b: 1 } } deepEqual {}
    // 因为不测试原型。

    如果两个值不相等,则抛出一个带有 message 属性的 AssertionError,其中 message 属性的值等于传入的 message 参数的值。 如果 message 参数为 undefined,则赋予默认的错误信息。

  3. assert.deepStrictEqual(actual, expected[, message])

    与 assert.deepEqual() 大致相同,但是有一些区别:

    • 原始值使用 全等运算符(===)比较。 Set 的值与 Map 的键使用 SameValueZero 比较。

    • 对象的原型也是用全等运算符 比较

    • 对象的类型标签要求相同

    • Object wrappers are compared both as objects and unwrapped values.

    const assert = require('assert');
    
    assert.deepEqual({ a: 1 }, { a: '1' });
    // 测试通过,因为 1 == '1'。
    
    assert.deepStrictEqual({ a: 1 }, { a: '1' });
    // 抛出 AssertionError: { a: 1 } deepStrictEqual { a: '1' }
    // 因为使用全等运算符 1 !== '1'。
    
    // 以下对象都没有自身属性。
    const date = new Date();
    const object = {};
    const fakeDate = {};
    
    Object.setPrototypeOf(fakeDate, Date.prototype);
    
    assert.deepEqual(object, fakeDate);
    // 测试通过,不测试原型。
    assert.deepStrictEqual(object, fakeDate);
    // 抛出 AssertionError: {} deepStrictEqual Date {}
    // 因为原型不同。
    
    assert.deepEqual(date, fakeDate);
    // 测试通过,不测试类型标签。
    assert.deepStrictEqual(date, fakeDate);
    // 抛出 AssertionError: 2017-03-11T14:25:31.849Z deepStrictEqual Date {}
    // 因为类型标签不同。
    
    assert.deepStrictEqual(new Number(1), new Number(2));
    // Fails because the wrapped number is unwrapped and compared as well.
    assert.deepStrictEqual(new String('foo'), Object('foo'));
    // OK because the object and the string are identical when unwrapped.

    如果两个值不相等,则抛出一个带有 message 属性的 AssertionError,其中 message 属性的值等于传入的 message 参数的值。 如果 message 参数为 undefined,则赋予默认的错误信息。

  4. assert.doesNotThrow(block[, error][, message])

    断言 block 函数不会抛出错误。 当 assert.doesNotThrow() 被调用时,他会立即调用 block 函数。 如果抛出错误且错误类型与 error 参数指定的相同,则抛出 AssertionError。 如果错误类型不相同,或 error 参数为 undefined, 则抛出错误。

  5. assert.fail(actual, expected[, message[, operator[,stackStartFunction]]])

    抛出 AssertionError

  6. assert.ifError(value) 如果 value 为真,则抛出 value。 可用于测试回调函数的 error 参数

  7. assert.notDeepEqual(actual, expected[, message])

  8. assert.ok(value[, message])

  9. assert.throws(block[, error][, message]) 断言 block 函数会抛出错误

注意事项

对于 SameValueZero 比较, 建议使用 ES2015 的 Object.is();

PreviousNodeJSNextchai.js 断言库

Last updated 5 years ago

Was this helpful?