# 一起玩 Cypress(4) - 使用JSON Schema驗證Json資料 ###### tags: `Test` `Cypress` ## 介紹 JSON Schema算是一個詞彙表,提供你可以說明以及驗證JSON資料,其優點如下 * 描述資料格式 * 提供人和電腦都可閱讀的文件 * 提供資料驗證以便於自動化測試以及客戶端傳送的資料 > 上面文字全來自於官網:laughing: > 這邊附上連結[json-schema](http://json-schema.org/specification.html) 這麼好用的東西接下來瞧瞧如何整合進`Cypress`內部使用 ## 目錄 [TOC] # 一、前言 因為工作需求需要再檢驗UI前先想先針對API傳遞的Json資料是否符合,因此就有了這一篇文章,因為這邊主要是協助可行性研究,所以會放在如何導入這部分,至於`json-schema`驗證規則及如何撰寫這邊不會提太太多,但文末有放上參考資料需要的人可以參閱。 # 二、使用介紹/實作步驟 這邊主要會使用[chai-json-schema](https://www.chaijs.com/plugins/chai-json-schema/)套件進行測試,其撰寫風格也要符合其規範,整體導入流程不算太困難就快速進入實作吧。 ## 環境建立 直接快速安裝吧 ```shell= npm install chai-json-schema ``` 安裝完成後前往`cypress\support`資料夾底下將以下代碼填入其中,我的話是放在`e2e.js`檔案內部,依據個人需求再做調整 ```javascript= import chaiJsonSchema from 'chai-json-schema'; chai.use(chaiJsonSchema); ``` 這樣就完成了(夠簡單吧),緊接著開始來撰寫我們的測試了 > 這邊也是延續撰寫,如果不知道怎麼建立或是使用可以參考前幾篇文章[[一起玩 Cypress(1) - 初探及快速建立]](/OttG8UPkQE6ZuMUHrTVWZg)。 ## 測試撰寫 因為我只想接測試JsonSchema能否執行和測試結果,所以就不走`BDD`的流程了,為了檢視方便會將程式碼寫在同一份 我們直接建立一個測試其路徑和檔名為`cypress\e2e\JsonSchema.cy.ts`,主要定義如下 * let Schema = 用來驗證JsonSchema的定義檔 * let JsonDataOK = 存放**正確**格式的Json資料 * let JsonDataNG = 存放**錯誤**格式的Json資料,其錯誤少了id結構 ```typescript= // cypress\e2e\JsonSchema.cy.ts let Schema = { title: 'my Schema', type: 'object', required: ['id', 'name', 'email'], properties: { id: { type: 'integer', }, email: { type: 'string', }, body: { type: 'string', }, }, } describe('JsonSchema testing OK or NG', () => { it('Json OK', () => { let JsonDataOK = { "id": 10, "name": "cypress", "email": "hello@cypress.io", }; expect(JsonDataOK).to.be.jsonSchema(Schema); }); it('Json NG', () => { let JsonDataNG = { "name": "cypress", "email": "hello@cypress.io", }; expect(JsonDataNG).to.be.jsonSchema(Schema); }); }) ``` ## 檢視結果 這邊可以看到測試是使用名稱為**my Schema**的測試結購來進行驗證,其測試失敗也會顯示出原因,我們制定的JsonSchema規則id為必要參數,所以`JsonDataNG`被檢驗出來錯誤,另一方面結構符合的則驗證成功。 測試結果如下: ![](https://i.imgur.com/4XXSxeM.png) # 結論 這邊算有點偷懶因為參考來源已經算很快速又清楚的講解,不過這邊還是紀錄成自己習慣的筆記方便閱讀。 <br/> --- 相關參考來源: [Validate similar JSON structure with Cypress?](https://stackoverflow.com/questions/67437922/validate-similar-json-structure-with-cypress) [Chai Assertion Library](https://www.chaijs.com/plugins/chai-json-schema/) [資料驗證好幫手 - JSON Schema Validator](https://github.com/Hsueh-Jen/blog/issues/2) <style> code > span{ color: red;} </style>