摘要:斷言穩(wěn)定級(jí)別鎖定斷言模塊提供了一個(gè)簡單斷言集,用于測試不變量。但是要注意,斷言模塊并不是一個(gè)測試框架,也不是一個(gè)通用的斷言庫。斷言模塊的已經(jīng)鎖定。版本加入測試深且強(qiáng)不等,與對(duì)立。版本加入測試是否為真。
斷言
穩(wěn)定級(jí)別:3 - 鎖定
斷言模塊提供了一個(gè)簡單斷言集,用于測試不變量。本模塊原本是Node.js的內(nèi)部使用,但也可以通過require("assert")在應(yīng)用中使用。但是要注意,斷言模塊并不是一個(gè)測試框架,也不是一個(gè)通用的斷言庫。
斷言模塊的API已經(jīng)鎖定。意味著在未來,本模塊應(yīng)用和暴露的方法都不會(huì)有任何修改或者增加。
assert(value[, message])v0.5.9版本加入
是assert.ok()的alias。
const assert = require("assert"); assert(true); // OK assert(1); // OK assert(false); // throws "AssertionError: false == true" assert(0); // throws "AssertionError: 0 == true" assert(false, "it"s false"); // throws "AssertionError: it"s false"assert.deepEqual(actual, expected[, message])
v0.1.21版本加入
用于測試 actual和expected的深等于。基本數(shù)據(jù)類型的值將會(huì)用等價(jià)運(yùn)算符( == )作比較。
本方法只適用于可枚舉且返回自身的屬性。 deepEqual()不能用于測試對(duì)象原型、附加符號(hào)、不可枚舉的屬性。這一點(diǎn)可能會(huì)導(dǎo)致一些意想不到的結(jié)果。比如,下面的例子不會(huì)拋出AssertionError,因?yàn)镋rror對(duì)象的屬性是不可枚舉的。
// WARNING: This does not throw an AssertionError! assert.deepEqual(Error("a"), Error("b"));
”深”等于意味著:傳入對(duì)象的子對(duì)象的可枚舉且返回自身的屬性也會(huì)被比較:
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); // OK, 一個(gè)對(duì)象和自身肯定是相等的 assert.deepEqual(obj1, obj2); // AssertionError: { a: { b: 1 } } deepEqual { a: { b: 2 } } // b的值不同 assert.deepEqual(obj1, obj3); // OK, 兩個(gè)對(duì)象是相等的 assert.deepEqual(obj1, obj4); // AssertionError: { a: { b: 1 } } deepEqual {} // 對(duì)象原型不能用于比較
如果傳入的兩個(gè)參數(shù)不相等,將會(huì)拋出一個(gè)AssertionError,它會(huì)自帶一個(gè)message屬性,可由message傳參設(shè)置。如果message傳參是undefined,就會(huì)給它賦值一個(gè)默認(rèn)的錯(cuò)誤信息。
assert.deepStrictEqual(actual, expected[, message])v1.2.0版本加入
與assert.deepEqual()只有兩個(gè)區(qū)別。第一,基本數(shù)據(jù)類型的值是用強(qiáng)等價(jià)運(yùn)算符(===)來比較的。第二,對(duì)象之間的比較要求它們的原型(prototype)也一致。
如果傳入的兩個(gè)參數(shù)不相等,將會(huì)拋出一個(gè)AssertionError,它會(huì)自帶一個(gè)message屬性,可由message傳參設(shè)置。如果message傳參是undefined,就會(huì)給它賦值一個(gè)默認(rèn)的錯(cuò)誤信息。
assert.doesNotThrow(block, error)v0.1.21版本加入
斷言block方法不會(huì)拋出錯(cuò)誤,關(guān)于拋出(throw)可參加assert.throw()了解更多細(xì)節(jié)。
當(dāng)assert.doesNotThrow()被調(diào)用的時(shí)候,它會(huì)立即調(diào)用block方法。
如果有錯(cuò)誤拋出,并且錯(cuò)誤類型與傳參中的錯(cuò)誤類型一致,此方法將拋出一個(gè)AssertionError。如果錯(cuò)誤類型不一致,或者傳參error未定義,那么錯(cuò)誤會(huì)被回傳給調(diào)用者。
比如下例中,將會(huì)拋出一個(gè)TypeError,因?yàn)殄e(cuò)誤類型不一致。
assert.doesNotThrow( () => { throw new TypeError("Wrong value"); }, SyntaxError );
但下例中就會(huì)拋出AssertionError并附帶message“Got unwanted exception (TypeError)..”。
assert.doesNotThrow( () => { throw new TypeError("Wrong value"); }, TypeError );
當(dāng)有AssertionError拋出的時(shí)候,如果傳參中定義了message參數(shù),那么它將會(huì)被附到AssertionError的message后面。
assert.doesNotThrow( () => { throw new TypeError("Wrong value"); }, TypeError, "Whoops" ); // Throws: AssertionError: Got unwanted exception (TypeError). Whoopsassert.equal(actual, expected[, message])
v0.1.21版本加入
用等價(jià)運(yùn)算符(==)比較actual和expected的淺等于。
const assert = require("assert"); assert.equal(1, 1); // OK, 1 == 1 assert.equal(1, "1"); // OK, 1 == "1" assert.equal(1, 2); // AssertionError: 1 == 2 assert.equal({a: {b: 1}}, {a: {b: 1}}); //AssertionError: { a: { b: 1 } } == { a: { b: 1 } }
如果傳入的兩個(gè)參數(shù)不相等,將會(huì)拋出一個(gè)AssertionError,它會(huì)自帶一個(gè)message屬性,可由message傳參設(shè)置。如果message傳參是undefined,就會(huì)給它賦值一個(gè)默認(rèn)的錯(cuò)誤信息。
assert.fail(actual, expected, message, operator)v0.1.21版本加入
拋出AssertionError。如果message也就是比較結(jié)果為假,那么錯(cuò)誤信息輸出actual和expected的值,用傳入的運(yùn)算符隔開;如果結(jié)果為真,錯(cuò)誤信息輸出傳入的message。
const assert = require("assert"); assert.fail(1, 2, undefined, ">"); // AssertionError: 1 > 2 assert.fail(1, 2, "whoops", ">"); // AssertionError: whoopsassert.ifError(value)
v0.1.97版本加入
如果value為真則輸出value值。適合用于測試回調(diào)方法中的error參數(shù)。
const assert = require("assert"); assert.ifError(0); // OK assert.ifError(1); // Throws 1 assert.ifError("error"); // Throws "error" assert.ifError(new Error()); // Throws Errorassert.notDeepEqual(actual, expected[, message])
v0.1.21版本加入
測試深不等,與assert.deepEqual()對(duì)立。
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.notDeepEqual(obj1, obj1); // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } } assert.notDeepEqual(obj1, obj2); // OK, obj1 and obj2 are not deeply equal assert.notDeepEqual(obj1, obj3); // AssertionError: { a: { b: 1 } } notDeepEqual { a: { b: 1 } } assert.notDeepEqual(obj1, obj4); // OK, obj1 and obj2 are not deeply equal
如果傳入的兩個(gè)參數(shù)深相等,將會(huì)拋出一個(gè)AssertionError,它會(huì)自帶一個(gè)message屬性,可由message傳參設(shè)置。如果message傳參是undefined,就會(huì)給它賦值一個(gè)默認(rèn)的錯(cuò)誤信息。
assert.notDeepStrictEqual(actual, expected[, message])v1.2.0版本加入
測試深且強(qiáng)不等,與assert.deepStrictEqual()對(duì)立。
const assert = require("assert"); assert.notDeepEqual({a:1}, {a:"1"}); // AssertionError: { a: 1 } notDeepEqual { a: "1" } assert.notDeepStrictEqual({a:1}, {a:"1"}); // OK
如果傳入的兩個(gè)參數(shù)深且強(qiáng)相等,將會(huì)拋出一個(gè)AssertionError,它會(huì)自帶一個(gè)message屬性,可由message傳參設(shè)置。如果message傳參是undefined,就會(huì)給它賦值一個(gè)默認(rèn)的錯(cuò)誤信息。
assert.notEqual(actual, expected[, message])v0.1.21版本加入
用不等價(jià)運(yùn)算符(!=)測試淺不等。
const assert = require("assert"); assert.notEqual(1, 2); // OK assert.notEqual(1, 1); // AssertionError: 1 != 1 assert.notEqual(1, "1"); // AssertionError: 1 != "1"
如果傳入的兩個(gè)參數(shù)淺相等,將會(huì)拋出一個(gè)AssertionError,它會(huì)自帶一個(gè)message屬性,可由message傳參設(shè)置。如果message傳參是undefined,就會(huì)給它賦值一個(gè)默認(rèn)的錯(cuò)誤信息。
assert.notStrictEqual(actual, expected[, message])v0.1.21版本加入
用強(qiáng)不等運(yùn)算符(!==)測試強(qiáng)不等。
const assert = require("assert"); assert.notStrictEqual(1, 2); // OK assert.notStrictEqual(1, 1); // AssertionError: 1 != 1 assert.notStrictEqual(1, "1"); // OK
如果傳入的兩個(gè)參數(shù)強(qiáng)等,將會(huì)拋出一個(gè)AssertionError,它會(huì)自帶一個(gè)message屬性,可由message傳參設(shè)置。如果message傳參是undefined,就會(huì)給它賦值一個(gè)默認(rèn)的錯(cuò)誤信息。
assert.ok(value[, message])v0.1.21版本加入
測試value是否為真。其實(shí)與assert.equal(!!value, true, message)等價(jià)。
如果value不為真,拋出AssertionError,附帶message信息與傳入message一致。如果message傳參是undefined,就會(huì)給它賦值一個(gè)默認(rèn)的錯(cuò)誤信息。
const assert = require("assert"); assert.ok(true); // OK assert.ok(1); // OK assert.ok(false); // throws "AssertionError: false == true" assert.ok(0); // throws "AssertionError: 0 == true" assert.ok(false, "it"s false"); // throws "AssertionError: it"s false"assert.strictEqual(actual, expected[, message])
v0.1.21版本加入
用強(qiáng)等運(yùn)算符(===)測試傳參是否強(qiáng)等于。
const assert = require("assert"); assert.strictEqual(1, 2); // AssertionError: 1 === 2 assert.strictEqual(1, 1); // OK assert.strictEqual(1, "1"); // AssertionError: 1 === "1"
如果傳入的兩個(gè)參數(shù)不是強(qiáng)等,將會(huì)拋出一個(gè)AssertionError,它會(huì)自帶一個(gè)message屬性,可由message傳參設(shè)置。如果message傳參是undefined,就會(huì)給它賦值一個(gè)默認(rèn)的錯(cuò)誤信息。
assert.throws(block, error)v0.1.21版本加入
期望block方法拋出錯(cuò)誤。
如果傳入自定義error,可以是構(gòu)造函數(shù)、正則表達(dá)式或驗(yàn)證函數(shù)。
如果傳入message但沒有錯(cuò)誤拋出,message將是AssertionError附帶的。
用構(gòu)造函數(shù)驗(yàn)證實(shí)例:
assert.throws( () => { throw new Error("Wrong value"); }, Error );
用正則表達(dá)式驗(yàn)證error:
assert.throws( () => { throw new Error("Wrong value"); }, /value/ );
自定義error驗(yàn)證:
assert.throws( () => { throw new Error("Wrong value"); }, function(err) { if ( (err instanceof Error) && /value/.test(err) ) { return true; } }, "unexpected error" );
請注意error參數(shù)可以為字符串。如果第二個(gè)傳參是個(gè)字符串,那么error參數(shù)將會(huì)被忽略,直接用這個(gè)字符串作為輸出的message。但這可能會(huì)導(dǎo)致很容易被忽略的問題:
// THIS IS A MISTAKE! DO NOT DO THIS! assert.throws(myFunction, "missing foo", "did not throw with expected message"); // Do this instead. assert.throws(myFunction, /missing foo/, "did not throw with expected message");全文目錄
請查看:全文目錄
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/86557.html
摘要:關(guān)于本文檔本文檔的目的,是全面地解釋的,即可作為參考文檔,同時(shí)也包含了概念的講解。但有的全新的實(shí)驗(yàn)性的,或者存在危險(xiǎn)性的部分則會(huì)被重新設(shè)計(jì)。穩(wěn)定級(jí)別鎖定只會(huì)有安全性能或相關(guān)的修復(fù)。不接受對(duì)此做修改的建議。 關(guān)于本文檔 本文檔的目的,是全面地解釋Node.js的API,即可作為參考文檔,同時(shí)也包含了概念的講解。每個(gè)章節(jié)都描述了一個(gè)內(nèi)置模塊或一個(gè)高階概念(high-level concep...
摘要:畢竟官方文檔才是未經(jīng)提煉的純技術(shù)點(diǎn),讀書不能只讀二手書。目前網(wǎng)上能找到的中文文檔基本都是基于的,但截至此文發(fā)布,最新的穩(wěn)定版都已經(jīng)是了。翻譯過程中主要參考官方英文文檔,以及極客學(xué)院的官方文檔中文翻譯。 前言 相信很多開發(fā)者和我一樣,在學(xué)習(xí)一門技術(shù)的時(shí)候,通過網(wǎng)上的各種教程和視頻入門之后會(huì)發(fā)現(xiàn)自己遇到一個(gè)上升瓶頸。造成這個(gè)瓶頸的很大一部分原因,我認(rèn)為是進(jìn)階教程的知識(shí)點(diǎn)過于分散,同時(shí)高質(zhì)量...
摘要:用法具體的參數(shù)及腳本運(yùn)行方式,請參考命令行工具章節(jié)。示例用寫的一個(gè)返回的服務(wù)器示例要運(yùn)行此服務(wù)器,將上面所示代碼放入文件,并用執(zhí)行它本文檔中所有的示例均可以類似方式運(yùn)行。全文目錄請查看全文目錄 用法 node [options] [v8 options] [script.js | -e script] [arguments] 具體的option參數(shù)及腳本運(yùn)行方式,請參考命令行工具章節(jié)。...
摘要:單元測試,測試一個(gè)簡單的組件。接口測試,用戶信息接口測試。學(xué)習(xí)借鑒,一些使用做測試的開源項(xiàng)目。這里使用到的內(nèi)置斷言斷言結(jié)果值等于我們想要的預(yù)期值,則測試通過。在里放入一個(gè)函數(shù),函數(shù)自動(dòng)執(zhí)行,里面執(zhí)行的結(jié)果必須拋出錯(cuò)誤,則測試通過。 目錄 1、為什么選擇 AVA ?2、API 概覽。3、準(zhǔn)備工作。4、單元測試,測試一個(gè)簡單的工具函數(shù)。5、使用 Promise、Async/await、Ob...
摘要:單元測試上一節(jié)有討論過,單元測試就是以代碼單元為單位進(jìn)行測試,代碼單元可以是一個(gè)函數(shù),一個(gè)模塊,或者一個(gè)類。單元測試是最容易理解也最容易實(shí)現(xiàn)的測試方式。在寫單元測試的時(shí)候,盡量將你的單元測試獨(dú)立出來,不要幾個(gè)單元互相引用。 showImg(https://segmentfault.com/img/remote/1460000008823416?w=997&h=350); 本文作者:G...
閱讀 1297·2021-11-22 09:34
閱讀 2162·2021-10-08 10:18
閱讀 1724·2021-09-29 09:35
閱讀 2453·2019-08-29 17:20
閱讀 2137·2019-08-29 15:36
閱讀 3398·2019-08-29 13:52
閱讀 775·2019-08-29 12:29
閱讀 1183·2019-08-28 18:10