test assert-02-power-assert-js 斷言

拓展閱讀

junit5-05-assert

junit5 系列

基于 junit5 實現(xiàn) junitperf 源碼分析

Auto generate mock data for java test.(便于 Java 測試自動生成對象信息)

Junit performance rely on junit5 and jdk8+.(java 性能測試框架。性能測試。壓測。測試報告生成。)

power-assert-js

Power Assert in JavaScript.

Provides descriptive assertion messages through standard assert interface.

No API is the best API.

設計理念

NO API IS THE BEST API — THE ELEGANT POWER OF POWER ASSERT

什么是 power-assert?

power-assert 是 JavaScript 中 "Power Assert" 概念的一種實現(xiàn)。
通過標準的 assert 接口提供描述性斷言消息。
沒有比它更好的 API。使用 power-assert,你不需要學習很多斷言庫的 API(在大多數(shù)情況下,你只需要記住 assert(any_expression) 函數(shù))。
停止記憶大量的斷言 API。只需創(chuàng)建返回真值或非真值的表達式,power-assert 將其顯示在屏幕上,作為你的失敗消息的一部分,而無需輸入任何消息。
power-assert 的核心價值在于絕對的簡單性和穩(wěn)定性。特別是,power-assert 堅持測試的最簡單形式,即 assert(any_expression)。
查看幻燈片:"power-assert,機制和哲學" —— 在 NodeFest 2014 的演講。
【新】現(xiàn)在你不再需要 require('power-assert')。繼續(xù)使用 require('assert'),power-assert 會在幕后進行增強。查看幻燈片:"從庫到工具 - power-assert 作為通用斷言增強工具"
為了獲得 power-assert 輸出,你需要轉換你的測試代碼以生成 power-assert 輸出。
power-assert - power = assert。在沒有代碼轉換的情況下,power-assert 就像普通的 assert 一樣工作。
與 assert 完全兼容。因此,你可以輕松地停止使用 power-assert,回到 assert。
有在線演示站點。
同時在服務器端和瀏覽器端工作。
通過 npm 和 bower 可用。
支持源映射,因此你可以像平常一樣進行調試。
提供 Babel 插件和 Babel 預設。
提供 Browserify 轉換。
提供 webpack 加載器。
提供 grunt 任務和 gulp 插件。
提供命令行工具。
提供自定義模塊加載器及其方便的配置模塊。
提供 Karma 適配器和 Karma 預處理器。
通過 Babel 插件支持 ES6+。
支持 CoffeeScript。
支持 TypeScript。
有 TypeScript 類型定義。
有用于將現(xiàn)有代碼從 chai、should.js 和 expect.js 轉換到 assert 的代碼遷移工具。
AVA,這個具有未來感的測試運行器,現(xiàn)在內置了 power-assert。
有 Lab 轉換器,以在 Lab 上啟用 power-assert。
有模塊加載器,使 ts-node 與 power-assert 協(xié)同工作。
Wallaby.js 通過 Babel 編譯器/預處理器支持 power-assert。
歡迎提交拉取請求、問題報告和補丁。
power-assert 為你的測試提供描述性的斷言消息,就像這樣。

  1) Array #indexOf() should return index when the value is present:
     AssertionError: # path/to/test/mocha_node.js:10

  assert(ary.indexOf(zero) === two)
         |   |       |     |   |
         |   |       |     |   2
         |   -1      0     false
         [1,2,3]

  [number] two
  => 2
  [number] ary.indexOf(zero)
  => -1

API

power-assert通過 espower 增強了這些 assert 函數(shù),在斷言失敗時生成描述性消息。

assert(value, [message])
assert.ok(value, [message])
assert.equal(actual, expected, [message])
assert.notEqual(actual, expected, [message])
assert.strictEqual(actual, expected, [message])
assert.notStrictEqual(actual, expected, [message])
assert.deepEqual(actual, expected, [message])
assert.notDeepEqual(actual, expected, [message])
assert.deepStrictEqual(actual, expected, [message])
assert.notDeepStrictEqual(actual, expected, [message])

power-assert 與 assert 完全兼容。因此,雖然它們沒有被增強(不生成描述性消息),但以下函數(shù)也是可用的。

assert.fail(actual, expected, message, operator)
assert.throws(block, [error], [message])
assert.doesNotThrow(block, [message])
assert.ifError(value)

從版本1.5.0開始,power-assert還支持 "strict mode"。

power-assert提供了一個用于定制的API。

assert.customize(options)

沒有 API 就是最好的 API

盡管 power-assert 與標準的 assert 接口完全兼容,在大多數(shù)情況下,你只需要記住的是 assert(any_expression) 函數(shù)。

power-assert 的核心價值在于絕對的簡單性和穩(wěn)定性。特別是,power-assert 堅持測試的最簡單形式,即 assert(any_expression)。

    assert(types[index].name === bob.name)
           |    ||      |    |   |   |
           |    ||      |    |   |   "bob"
           |    ||      |    |   Person{name:"bob",age:5}
           |    ||      |    false
           |    |11     "alice"
           |    Person{name:"alice",age:3}
           ["string",98.6,true,false,null,undefined,#Array#,#Object#,NaN,Infinity,/^not/,#Person#]
  
    --- [string] bob.name
    +++ [string] types[index].name
    @@ -1,3 +1,5 @@
    -bob
    +alice

感想

個人以后設計 api 就可以參考這個。

使用的時候,讓用戶盡可能的不需要查閱文檔,直接使用。

參考資料

https://github.com/power-assert-js/power-assert

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容