Jest-Javascript單元測試工具
Jest是一個(gè)JavaScript測試框架,由Facebook用來測試所有JavaScript代碼,包括React應(yīng)用程序。
不同級別的自動(dòng)化測試:單元、集成、組件和功能. 單元測試可以看作是和在組件級別測試JavaScript對象和方法一樣的最基本的。默認(rèn)情況下,React Native提供在Android和iOS都可以使用的Jest來進(jìn)行單元測試。現(xiàn)在,測試的覆蓋率并不完美,但是根據(jù)Facebook的說法,未來將會(huì)有更強(qiáng)大測試能力的工具被引入到React Native,同時(shí)用戶也可以構(gòu)建他們自己的測試工具。
Jest的測試特性
適應(yīng)性:Jest是模塊化、可擴(kuò)展和可配置的。
快速和沙盒:Jest虛擬化JavaScript環(huán)境,能模擬瀏覽器,并在工作進(jìn)程之間并行運(yùn)行測試。
快照測試:Jest能夠?qū)eact 樹進(jìn)行快照或別的序列化數(shù)值快速編寫測試,提供快速更新的用戶體驗(yàn)。
快速交互模式: 錯(cuò)誤信息會(huì)有幫助的顏色編碼標(biāo)記,堆棧跟蹤快速指向問題的根源。
使用
配置Jest
可以使用npm運(yùn)行 **npm install --save-dev jest**? 也可以與使用所有的Js包一樣:先配置package.json,再執(zhí)行npm install。
編寫測試腳本
1.讓我們寫一個(gè)假設(shè)的測試是sum.js文件,函數(shù)為:
module.exports = (a, b) => a + b;
2.創(chuàng)建一個(gè)目錄____tests____/和文件xxx-test.js,或直接創(chuàng)建名稱xxx.test.js或xxx.spec.js并把它放在你的項(xiàng)目的任何地方(**其實(shí)在jest中我們對腳步的定義是有約束的,采用這幾鐘創(chuàng)建方式,使jest在源碼文件中可以找到測試腳步并執(zhí)行**)
test('adds 1 + 2 to equal 3', () => {
const sum = require('../sum');
expect(sum(1, 2)).toBe(3);
});
3.執(zhí)行腳本? (執(zhí)行腳本有兩種方式)
1)可以添加到package.json
"scripts": {
"test": "jest"
}
2)直接執(zhí)行命令
需要安裝全局jest命令: npm install -g jest,進(jìn)入項(xiàng)目,執(zhí)行命令:jest
4.運(yùn)行
運(yùn)行**npm test**會(huì)打印此消息:**PASS ____tests____/sum-test.js** 到此你就成功使用Jest寫了你的第一個(gè)測試!
所有的斷言
.expect(value)
.lastCalledWith(arg1, arg2, ...) is an alias for .toHaveBeenLastCalledWith(arg1, arg2, ...)
.not
.toBe(value)
.toBeCalled() is an alias for .toHaveBeenCalled()
.toBeCalledWith(arg1, arg2, ...) is an alias for .toHaveBeenCalledWith(arg1, arg2, ...)
.toHaveBeenCalled()
.toHaveBeenCalledTimes(number)
.toHaveBeenCalledWith(arg1, arg2, ...)
.toHaveBeenLastCalledWith(arg1, arg2, ...)
.toBeCloseTo(number, numDigits)
.toBeDefined()
.toBeFalsy()
.toBeGreaterThan(number)
.toBeGreaterThanOrEqual(number)
.toBeLessThan(number)
.toBeLessThanOrEqual(number)
.toBeInstanceOf(Class)
.toBeNull()
.toBeTruthy()
.toBeUndefined()
.toContain(item)
.toContainEqual(item)
.toEqual(value)
.toHaveLength(number)
.toMatch(regexp)
.toMatchObject(object)
.toMatchSnapshot()
.toThrow()
.toThrowError(error)
.toThrowErrorMatchingSnapshot()