掃二維碼與項(xiàng)目經(jīng)理溝通
我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流
對(duì)于稍微有一些開(kāi)發(fā)經(jīng)驗(yàn)的同學(xué)在開(kāi)發(fā)過(guò)程中總會(huì)經(jīng)歷下面類(lèi)似的問(wèn)題:

創(chuàng)新互聯(lián)是專業(yè)的紹興網(wǎng)站建設(shè)公司,紹興接單;提供網(wǎng)站制作、成都做網(wǎng)站,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行紹興網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
以上這些問(wèn)題都是由于大多數(shù)開(kāi)發(fā)者所使用最基本的手動(dòng)測(cè)試的方式所帶來(lái)的問(wèn)題,解決它的根本舉措就是引入自動(dòng)化測(cè)試方案。
在實(shí)際開(kāi)發(fā)過(guò)程中,編寫(xiě)自動(dòng)化測(cè)試代碼通常是開(kāi)發(fā)人員不太喜歡的一個(gè)環(huán)節(jié)。大多數(shù)情況下,前端開(kāi)發(fā)人員在開(kāi)發(fā)完一項(xiàng)功能后,只是打開(kāi)瀏覽器手動(dòng)點(diǎn)擊,查看效果是否正確,之后就很少對(duì)該塊代碼進(jìn)行管理。
造成這種情況的原因主要有兩個(gè):
但這些問(wèn)題不應(yīng)該作為我們掌握前端自動(dòng)化測(cè)試的絆腳石。而且,一旦掌握了前端自動(dòng)化測(cè)試方案,無(wú)論是對(duì)大型項(xiàng)目的開(kāi)發(fā),還是升職加薪,都是有益的。
提到測(cè)試的時(shí)候,即使是最簡(jiǎn)單的一個(gè)代碼塊可能都讓初學(xué)者不知所措。最常問(wèn)的問(wèn)題的是“我怎么知道要測(cè)試什么?”。如果你正在寫(xiě)一個(gè) Web 應(yīng)用,那么你每個(gè)頁(yè)面每個(gè)頁(yè)面的測(cè)試用戶交互的方式,就是一個(gè)很好的開(kāi)端了。但 Web 應(yīng)用也是由很多個(gè)函數(shù)和模塊組成的代碼單元,也是需要測(cè)試的。通常有兩種情況:
該怎么辦呢?對(duì)于上面兩種場(chǎng)景,你可以把測(cè)試視為代碼的一部分來(lái)編寫(xiě)。我所說(shuō)的這些代碼,是用來(lái)檢查給定的函數(shù)是否產(chǎn)生預(yù)期輸出結(jié)果的。一個(gè)典型的測(cè)試流程如下:
1. 引入要測(cè)試的函數(shù)
2. 給函數(shù)一個(gè)輸入
3. 定義預(yù)期輸出
4. 檢查函數(shù)是否返回了預(yù)期的輸出結(jié)果
就這么多。這樣看測(cè)試也沒(méi)那么可怕的嘛:輸入 —— 預(yù)期輸出 —— 驗(yàn)證結(jié)果。
下面來(lái)看一個(gè)例子:
- // math.js
- functionadd (a, b) {
- return a + b
- }
- functionsubtract (x, y) {
- return x - y
- }
- module.exports= {
- add,
- subtract
- }
如何保證上面代碼的正確性?
下面來(lái)寫(xiě)一段測(cè)試代碼:
- // test.js
- const { add, subtract } =require('./math')
- const result =add(1,2)
- const expected =3
- if (result !== expected) {
- thrownewError(`1 + 2 應(yīng)該等于${expected},但是結(jié)果卻是${result}`)
- }
- const result2 =subtract(2,1)
- const expected2 =1
- if (result2 !== expected2) {
- thrownewError(`2 - 1 應(yīng)該等于${expected2},但是結(jié)果卻是${result2}`)
- }
命令行執(zhí)行 node test.js 后,會(huì)看到錯(cuò)誤信息:
- Error: 1 + 2 應(yīng)該等于 3,但是結(jié)果卻是 2
通過(guò)測(cè)試代碼可以很方便的幫助驗(yàn)證代碼的正確性。
之前示例的測(cè)試代碼太過(guò)繁瑣,可以思考一下能否封裝的更簡(jiǎn)便一些,比如下面這樣:
- expect(add(1,2)).toBe(3)
- expect(subtract(2,1)).toBe(-1)
上面的測(cè)試代碼就像自然語(yǔ)言說(shuō)話一樣,很舒服。
實(shí)現(xiàn) expect 方法:
- // test.js
- const { add, subtract } =require('./math')
- expect(add(1,2)).toBe(3)
- expect(subtract(2,1)).toBe(1)
- functionexpect (result) {
- return {
- toBe (actual) {
- if (result !== actual) {
- thrownewError(`預(yù)期值和實(shí)際值不相等,預(yù)期結(jié)果: ${actual},實(shí)際結(jié)果: ${result}`)
- }
- }
- }
- }
增加錯(cuò)誤提示信息:
- // test.js
- const { add, subtract } =require('./math')
- test('測(cè)試加法', () => {
- expect(add(1,2)).toBe(3)
- })
- test('測(cè)試減法', () => {
- expect(subtract(2,1)).toBe(1)
- })
- functiontest (description, callback) {
- try {
- callback()
- console.log(`${description}通過(guò)測(cè)試`)
- } catch (err) {
- console.error(`${description}沒(méi)有通過(guò)測(cè)試:${err}`)
- }
- }
- functionexpect (result) {
- return {
- toBe (actual) {
- if (result !== actual) {
- thrownewError(`預(yù)期值和實(shí)際值不相等,預(yù)期結(jié)果: ${actual},實(shí)際結(jié)果: ${result}`)
- }
- }
- }
- }
本文轉(zhuǎn)載自微信公眾號(hào)「勾勾的前端世界」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系勾勾的前端世界公眾號(hào)。

我們?cè)谖⑿派?4小時(shí)期待你的聲音
解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流