ยูทิลิตีการทดสอบ React hooks ที่เรียบง่ายและสมบูรณ์ซึ่งส่งเสริมแนวทางการทดสอบที่ดี
หากคุณใช้ react-testing-library
เวอร์ชันปัจจุบัน ให้แทนที่
import { renderHook } from '@testing-library/react-hooks'
กับ
import { renderHook } from '@testing-library/react'
เมื่อถูกแทนที่แล้ว @testing-library/react-hooks
ก็สามารถถอนการติดตั้งได้
ในฐานะที่เป็นส่วนหนึ่งของการเปลี่ยนแปลงสำหรับ React 18 มีการตัดสินใจว่า renderHook
API ที่ไลบรารีนี้จัดทำขึ้นจะถูกรวมเป็นส่วนเพิ่มเติมอย่างเป็นทางการของทั้ง react-testing-library
(PR) และ react-native-testing-library
(PR) ด้วย ความตั้งใจที่จะจัดให้มีการใช้งานที่สอดคล้องกันและสม่ำเสมอมากขึ้นสำหรับผู้ใช้ของเรา
โปรดอดใจรอในขณะที่เราสรุปการเปลี่ยนแปลงเหล่านี้ในไลบรารีการทดสอบที่เกี่ยวข้อง ในระหว่างนี้คุณสามารถติดตั้ง @testing-library/react@^13.1
useCounter.js
useCounter.test.js
คุณกำลังเขียน hook แบบกำหนดเองที่ยอดเยี่ยม และต้องการทดสอบ แต่ทันทีที่คุณเรียกมัน คุณจะเห็นข้อผิดพลาดต่อไปนี้:
การละเมิดที่ไม่คงที่: สามารถเรียก Hooks ได้ภายในเนื้อหาของส่วนประกอบฟังก์ชันเท่านั้น
คุณคงไม่อยากเขียน Component เพื่อทดสอบ Hook นี้เพียงอย่างเดียว และต้องหาวิธีที่คุณจะทริกเกอร์วิธีต่างๆ ทั้งหมดที่ Hook สามารถอัปเดตได้ โดยเฉพาะอย่างยิ่งเมื่อพิจารณาถึงความซับซ้อนของวิธีที่คุณเชื่อมโยงสิ่งทั้งหมดเข้าด้วยกัน .
react-hooks-testing-library
ช่วยให้คุณสร้างชุดทดสอบอย่างง่ายสำหรับ React hooks ที่จัดการการทำงานภายในเนื้อหาของส่วนประกอบฟังก์ชัน เช่นเดียวกับการให้ฟังก์ชันยูทิลิตี้ที่มีประโยชน์มากมายสำหรับการอัปเดตอินพุตและดึงเอาต์พุตที่น่าทึ่งของคุณ ตะขอที่กำหนดเอง ไลบรารีนี้มีจุดมุ่งหมายเพื่อมอบประสบการณ์การทดสอบที่ใกล้เคียงกับการใช้ hook ของคุณจากภายในส่วนประกอบจริงมากที่สุดเท่าที่จะเป็นไปได้
เมื่อใช้ไลบรารีนี้ คุณไม่ต้องกังวลกับวิธีสร้าง เรนเดอร์ หรือโต้ตอบกับส่วนประกอบการโต้ตอบเพื่อทดสอบ hook ของคุณ คุณสามารถใช้เบ็ดได้โดยตรงและยืนยันผลลัพธ์
useCounter.js
import { useState , useCallback } from 'react'
function useCounter ( ) {
const [ count , setCount ] = useState ( 0 )
const increment = useCallback ( ( ) => setCount ( ( x ) => x + 1 ) , [ ] )
return { count , increment }
}
export default useCounter
useCounter.test.js
import { renderHook , act } from '@testing-library/react-hooks'
import useCounter from './useCounter'
test ( 'should increment counter' , ( ) => {
const { result } = renderHook ( ( ) => useCounter ( ) )
act ( ( ) => {
result . current . increment ( )
} )
expect ( result . current . count ) . toBe ( 1 )
} )
การใช้งานขั้นสูงเพิ่มเติมสามารถพบได้ในเอกสารประกอบ
npm install --save-dev @testing-library/react-hooks
react-hooks-testing-library
ไม่ได้มาพร้อมกับเวอร์ชันของ react
เพื่อให้คุณสามารถติดตั้งเวอร์ชันเฉพาะที่คุณต้องการทดสอบได้ นอกจากนี้ยังไม่ได้ติดตั้งมาพร้อมกับตัวเรนเดอร์เฉพาะ ขณะนี้เรารองรับ react-test-renderer
และ react-dom
คุณจะต้องติดตั้งเพียงอย่างใดอย่างหนึ่ง อย่างไรก็ตาม หากคุณได้ติดตั้งทั้งสองอย่างแล้ว เราจะใช้ react-test-renderer
เป็นค่าเริ่มต้น สำหรับข้อมูลเพิ่มเติม โปรดดูเอกสารการติดตั้ง โดยทั่วไป เวอร์ชันที่ติดตั้งสำหรับ react
และตัวเรนเดอร์ที่เลือกควรมีเวอร์ชันที่ตรงกัน:
npm install react@^16.9.0
npm install --save-dev react-test-renderer@^16.9.0
หมายเหตุ: เวอร์ชันขั้นต่ำที่รองรับของ
react
,react-test-renderer
และreact-dom
คือ^16.9.0
ดูการอ้างอิง API
ขอขอบคุณผู้คนที่แสนวิเศษเหล่านี้ (คีย์อีโมจิ):
ไมเคิล เพย์เปอร์ - - - | โอโตฟุ-สแควร์ | แพทริค พี. เฮนลีย์ - - | มาเธอุส มาร์เกส | ธรุฟ ปาเตล - - | นาธาเนียล ทัคเกอร์ - - | เซอร์เก กริชเชนโก้ - |
โจเซป เอ็ม โซเบรเปเร | มาร์เซล ทินเนอร์ | แดเนียล เค. - | วินซ์ มาโลน | เซบาสเตียน เวเบอร์ | คริสเตียน กิลล์ | จาวาสคริปต์ โจ |
ซาราห์ ดายัน - | โรมัน กูเซฟ | อดัม เซคเคิล | เคย์ยะ ซาซากิ | หูเฉิน | จอช - - | นาอามาน เฮิร์ชเฟลด์ |
เบรย์ดอน ฮอลล์ | เจค็อบ เอ็มจี อีแวนส์ | ไทเกอร์ อโบรดี | อัมร์ เอ. โมฮัมเหม็ด | จูฮานา เจาเฮียเนน | เจนส์ ไมน์เดิร์ตมา | มาร์โก มอเร็ตติ - |
มาร์ติน วี. | เอโรซัค | นิค แมคเคอร์ดี - | อารยา | มึนงง86 | อเล็กซ์ ยัง - | เบน แลมเบิร์ต |
เดวิด โช-ลีรัตน์ | อีวาน ฮาร์มอน | เจสัน บราวน์ | คาวีเต็ง | เลโอนิด ชากาบุตดินอฟ | ลีวาย บุชเชอร์ | มิเคเล่ เซตเตปานี |
แซม | ธเนศ ประทักษ์ | ทอม รีส์-เฮิร์ดแมน | อิคบาล125 | Cliffzhaobupt - | จอน คูปส์ | โจนาธาน เพย์เปอร์ - |
ฌอน เบนส์ | มิคาอิล วาซิน | อเล็กซานดาร์ กราบิช | โจนาธาน โฮล์มส์ | ไมเคิล เดอ โบอี้ - | แอนตัน ซิโนเวียฟ - | มารีอานา-exelate - |
มาตัน โบเรนเคราท์ - | แอนดรูเกอร์ | ไบรอัน เวน - - | โรเบิร์ต สโนว์ | คริส เฉิน | มาเซียส | ไหลชูซิน |
โครงการนี้เป็นไปตามข้อกำหนดของผู้มีส่วนร่วมทั้งหมด ยินดีต้อนรับการบริจาคใด ๆ !
กำลังมองหาที่จะมีส่วนร่วม? มองหาป้ายกำกับ Good First Issue
โปรดแจ้งปัญหาเกี่ยวกับข้อบกพร่อง เอกสารที่ขาดหายไป หรือพฤติกรรมที่ไม่คาดคิด
ดูข้อบกพร่อง
โปรดยื่นเรื่องเพื่อแนะนำคุณสมบัติใหม่ โหวตคำขอคุณสมบัติโดยการเพิ่ม ? สิ่งนี้ช่วยให้ผู้ดูแลจัดลำดับความสำคัญของงานได้
ดูคำขอคุณสมบัติ
สำหรับคำถามที่เกี่ยวข้องกับการใช้ห้องสมุด คุณสามารถแจ้งปัญหาได้ที่นี่ หรือไปที่ชุมชนสนับสนุน:
เอ็มไอที