搜尋
首頁web前端js教程詳解講解使用jest測試react native組件
詳解講解使用jest測試react native組件Jun 06, 2018 pm 03:02 PM
jestnativereact

本篇文章主要介紹了詳解如何在專案中使用jest測試react native元件,現在分享給大家,也給大家做個參考。

目前Javascript的測試工具很多,但針對React的測試策略,Facebook推出的ReactJs標配測試工具是Jest.Jest的官網位址:https://facebook.github.io/jest/。我們可以看到Jest官網宣稱的是:Painless JavaScript Testing。是Facebook用於測試服務和React應用程式的JavaScript單元測試框架。

所謂單元測試也就是對每個單元進行測試,通俗的將一般針對的是函數,類別或單一元件,不涉及系統和整合。單元測試是軟體測試的基礎測試。 Jest主要有以下特點:

  1. 適應性:Jest是模組化、可擴充、可設定的。

  2. 沙箱與快速:Jest虛擬化了JavaScript的環境,能模擬瀏覽器,並且並行執行

  3. 快照測試:Jest能夠對React 樹進行快照或別的序列化數值快速編寫測試,提供快速更新的使用者體驗。

  4. 支援非同步程式碼測試:支援promises和async/await

  5. #自動產生靜態分析結果:不僅顯示測試案例執行結果,也顯示語句、分支、函數等覆蓋率。

為什麼要使用單元測試工具

我們在開發過程中,不使用測試工具還是可以自己寫程式碼進行單元測試,但是我們的程式碼存在著相互呼叫關係,在測試過程中我們又希望使單元相對獨立而又能正常運行,就需要我們對被測函數的依賴函數和環境進行mock,並且在測試資料輸入、測試執行和測試結果檢查方面有許多相似性,測試工具正是為我們在這些方面提供了方便。

準備階段

需要一個rn項目,這裡示範的是我個人的專案ReactNative-ReduxSaga-TODO

安裝jest

#如果你是用react-native init命令列創建的rn項目,並且你的rn版本在0.38以上,則無需安裝了。不太清楚的話就看一下

package.json檔案中是否包含以下程式碼:

 // package.json
 "scripts": {
  "test": "jest"
 },
 "jest": {
  "preset": "react-native"
 }

如果沒有就安裝一下npm i jest --save-dev,並且把上述程式碼加入到package.json檔案的對應位置。

以上步驟完成後,簡單執行npm run test測試一下jest是否配置成功。但我們沒有寫測試用例,終端機會印出no tests found。這時就配置完成了。

快照測試

寫一個元件

import React from 'react';
import {
 Text, View,
} from 'react-native';

import PropTypes from 'prop-types';

const PostArea = ({ title, text, color }) => (
 <View style={{ backgroundColor: &#39;#ddd&#39;, height: 100 }}>
  <Text style={{ fontSize: 30 }}>{title}</Text>
  <Text style={{ fontSize: 15, color }}>{text}</Text>
 </View>
);

export default PostArea;

#在專案根目錄下找到__test__資料夾,現在,讓我們使用React的測試渲染器和Jest的快照功能來與元件進行交互,並捕獲呈現的輸出並建立一個快照檔案。

// PostArea_test.js
import &#39;react-native&#39;;
import React from &#39;react&#39;;
import PostArea from &#39;../js/Twitter/PostArea&#39;;

import renderer from &#39;react-test-renderer&#39;;

test(&#39;renders correctly&#39;, () => {
 const tree = renderer.create(<PostArea title="title" text="text" color="red" />).toJSON();
 expect(tree).toMatchSnapshot();
});

然後在終端機運行npm run test或jest。會輸出:

PASS  __tests__\PostArea_test.js (6.657s)
  √ renders correctly (5553ms)

 › 1 snapshot written.##Snapshot ›
 › 1# snapshot written in 1 test suite.

Test Suites: 1 passed, 1 total

Tests:       1 passed, 1 total
Snapshots:   1 added, 1 到#1: #Ran all test suites.

同時,在test資料夾下會輸出一個文件,也就是產生的快照。

// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`renders correctly 1`] = `
<View
 style={
  Object {
   "backgroundColor": "#ddd",
   "height": 100,
  }
 }
>
 <Text
  accessible={true}
  allowFontScaling={true}
  disabled={false}
  ellipsizeMode="tail"
  style={
   Object {
    "fontSize": 30,
   }
  }
 >
  title
 </Text>
 <Text
  accessible={true}
  allowFontScaling={true}
  disabled={false}
  ellipsizeMode="tail"
  style={
   Object {
    "color": "red",
    "fontSize": 15,
   }
  }
 >
  text
 </Text>
</View>
`;

修改原始檔案

在下次執行測試的時候,呈現的輸出將與先前建立的快照進行比較。快照應該和程式碼一起提交。當快照測試失敗的時候,就需要檢查是否有意或無意的更改。如果是和預期中的變化一樣,請呼叫jest -u來覆蓋目前的快照。

我們來更改原來的程式碼:把第二行的字號改為14.

<Text style={{ fontSize: 14, color }}>{text}</Text>

這時,我們再執行jest。這時終端將會拋出錯誤,並指出了錯誤位置

因為這段程式碼是我們有意改的,這時運行jest -u,快照被覆蓋。再執行jest則不會報錯了~

上面是我整理給大家的,希望今後會對大家有幫助。

相關文章:

在vue-prop中使用父元件向子元件進行傳值如何實作

在Node.js中使用cheerio製作簡單的網頁爬蟲(詳細教學)

在vue中如何實作父元件向子元件傳遞多個資料

#

以上是詳解講解使用jest測試react native組件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
react中canvas的用法是什么react中canvas的用法是什么Apr 27, 2022 pm 03:12 PM

在react中,canvas用于绘制各种图表、动画等;可以利用“react-konva”插件使用canvas,该插件是一个canvas第三方库,用于使用React操作canvas绘制复杂的画布图形,并提供了元素的事件机制和拖放操作的支持。

react中antd和dva是什么意思react中antd和dva是什么意思Apr 21, 2022 pm 03:25 PM

在react中,antd是基于Ant Design的React UI组件库,主要用于研发企业级中后台产品;dva是一个基于redux和“redux-saga”的数据流方案,内置了“react-router”和fetch,可理解为应用框架。

React是双向数据流吗React是双向数据流吗Apr 21, 2022 am 11:18 AM

React不是双向数据流,而是单向数据流。单向数据流是指数据在某个节点被改动后,只会影响一个方向上的其他节点;React中的表现就是数据主要通过props从父节点传递到子节点,若父级的某个props改变了,React会重渲染所有子节点。

react中为什么使用nodereact中为什么使用nodeApr 21, 2022 am 10:34 AM

因为在react中需要利用到webpack,而webpack依赖nodejs;webpack是一个模块打包机,在执行打包压缩的时候是依赖nodejs的,没有nodejs就不能使用webpack,所以react需要使用nodejs。

react中forceupdate的用法是什么react中forceupdate的用法是什么Apr 19, 2022 pm 12:03 PM

在react中,forceupdate()用于强制使组件跳过shouldComponentUpdate(),直接调用render(),可以触发组件的正常生命周期方法,语法为“component.forceUpdate(callback)”。

react是组件化开发吗react是组件化开发吗Apr 22, 2022 am 10:44 AM

react是组件化开发;组件化是React的核心思想,可以开发出一个个独立可复用的小组件来构造应用,任何的应用都会被抽象成一颗组件树,组件化开发也就是将一个页面拆分成一个个小的功能模块,每个功能完成自己这部分独立功能。

react与vue的虚拟dom有什么区别react与vue的虚拟dom有什么区别Apr 22, 2022 am 11:11 AM

react与vue的虚拟dom没有区别;react和vue的虚拟dom都是用js对象来模拟真实DOM,用虚拟DOM的diff来最小化更新真实DOM,可以减小不必要的性能损耗,按颗粒度分为不同的类型比较同层级dom节点,进行增、删、移的操作。

react和reactdom有什么区别react和reactdom有什么区别Apr 27, 2022 am 10:26 AM

react和reactdom的区别是:ReactDom只做和浏览器或DOM相关的操作,例如“ReactDOM.findDOMNode()”操作;而react负责除浏览器和DOM以外的相关操作,ReactDom是React的一部分。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),