国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

單元測試之斷言

Achilles / 689人閱讀

摘要:單元測試之斷言作為前端開發,很少去自己寫單元測試。對于單元測試的了解也很少,自學了一點關于單元測試斷言的知識,有了一些自己的個人理解,記錄下來,方便下次使用時查閱。是被測試值的類型,也就是斷言的期望值。其中主要適用于行為驅動測試。

單元測試之斷言
作為前端開發,很少去自己寫單元測試。對于單元測試的了解也很少,自學了一點關于單元測試斷言的知識,有了一些自己的個人理解,記錄下來,方便下次使用時查閱。
什么是斷言

當你對類,模塊或者方法的可以接受的輸入和輸出有著很明確的定義和認識,當程序的輸出結果和輸入不匹配時,
你想讓程序有一個明確的返回。比如:我明確地知道1+1=2,我現在就想知道我輸入1+1會不會得到2。如果不是程序返回一個錯誤。這時候我們通常會使用到斷言

斷言就是專門用來驗證輸出和期望是否一致的一個工具。在內容的實現上,它是通過比較一個實際值actual和一個期望值expected來實現的。下面介紹一個使用較為廣泛的斷言庫chai.js

chai.js斷言庫

安裝和導入

npm i chai
import chai from "chai"
let expect = chai.expect;

使用

let foo = "bar";
expect(foo).to.equal("bar");

chai的使用是類似于鏈式調用的形式。以expect(foo).to.be.a("string");為例,
通過.我么你可以把這個鏈式分為幾個部分:

expect(foo)

to

be

a("string")

我們逐步來理解這幾個部分:
expect(foo):是你要斷言的對象,翻譯過來就是我希望某某某
to:虛詞,單純作為語言鏈提供以期提高斷言的可讀性,它本身并不具有斷言功能。
be:同to一樣,是語言鏈調用提高可讀性。
a(string)a(type)是一個斷言,用來判斷測試紙的類型。type是被測試值的類型,也就是斷言的期望值。

那么根據上面的分析,我們可以知道實現一個斷言需要這幾個部分:

要斷言的對象

不具備斷言功能的斷言詞

具備斷言功能的斷言詞

以及期望結果

要斷言的對象和期望結果都是需要根據實際輸入和輸出進行設置的。因此我們主要是講解斷言詞。

不具備斷言功能的斷言詞

to

be

been

is

that

which

and

has

have

with

at

of

same

but

does

still

這些斷言詞其實沒有意義,你把它去掉也不受到影響。比如:

expect(foo).to.equal("bar");
expect(foo).equal("bar");

上面兩個斷言能夠實現相同的功能。也就是說這些詞語使不使用沒什么影響。
接下來說一下具備斷言功能的斷言詞。

具備斷言功能的斷言詞

equal

equal是一個基本上萬能的斷言詞,絕大多數的斷言都可以轉換成使用equal來實現。

比如判斷變量長度是否為3,我們可以使用lengthOf,同樣可以使用equal實現

expect(foo).have.lengthOf(3);
expect(foo.length).equal(3);

比如判斷數據類型:我們既可以使用a,同樣可以使用equal實現

expect(foo).to.be.a("string");
expect(typeof foo).to.equal("string");

.deep

deep主要是用來遞歸比較對象的鍵值對,而不是比較對象本身。通常配合equalproperty進行使用。
比如:

expect([1,2]).equal([1,2]) // 斷言不通過

上面的斷言無法通過,因為引用類型的比較的是對象。接下來我們看使用deep

expect([1,2]).deep.equal([1,2]) // 斷言通過

也就是說如果是數組,對象等引用類型時,要比較里面的值需要使用deep

通過使用equaldeep我們基本上能夠實現絕大多數的斷言。更多的關于斷言
可以參考官網

說明

目前只是介紹了expect的使用,其實chai.js還有assertshould兩種斷言方式。
其中expect主要適用于行為驅動測試(Behavior Driven Development.BDD)。其他兩種斷言方式,以后用到了再進行介紹。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/106567.html

相關文章

  • 前端單元測試初探

    摘要:本文只討論單測的范疇,對集成測試有興趣的話,可以看下的集成測試代碼。前端單測現狀測試本質上就是假定一個輸入,然后判斷得到預期的輸出。 原文發于我的博客:https://github.com/hwen/blogS... 要不要寫單測? 關于這個 cnode 上就有個很有意思的討論 做個調查,你的 Node 應用有寫單測嗎? 看完這個應該會有結論?如果沒有,就回帖跟別人探討下~ 測試 測試...

    isLishude 評論0 收藏0
  • Angular單元測試系列-如何使用Jasmine進行Angular單元測試

    摘要:四結論本章幾乎所有的內容在單元測試經常使用到的東西特別是異步部分,三種不同異步方式并非共存的,而是需要根據具體業務而采用。否則,你會發現真難寫單元測試。自此,我們算是為寫單元測試打下了基礎。 以下是我假定那些極少或壓根沒寫單元測試的人準備的,因此,會白話解釋諸多概念性問題,同時會結合 Jasmine 與之對應的方法進行講解。 一、概念 Test Suite 測試套件,哪怕一個簡單的類,...

    zeyu 評論0 收藏0
  • React 單元測試策略及落地

    摘要:寫好的單元測試,對開發速度項目維護有莫大的幫助。我認為單元測試的上下文存在于敏捷中。接下來一小節,就可以正式進入如何做的環節了如何寫好單元測試。前面說到,我們對單元測試寄予 寫好的單元測試,對開發速度、項目維護有莫大的幫助。前端的測試工具一直推陳出新,而測試的核心、原則卻少有變化。與產品代碼一并交付可靠的測試代碼,是每個專業開發者應該不斷靠近的一個理想之地。本文就圍繞測試講講,為什么我...

    nifhlheimr 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<