1 回答

TA貢獻(xiàn)1807條經(jīng)驗(yàn) 獲得超9個(gè)贊
打個(gè)比方說(shuō),你有如下代碼:
var filterUsers = function(cb){ $.get('xxx-url') .done(function(users){ var leftUsers = users.filter(user => user.age > 20); cb(leftUsers); }); };
這是一個(gè)非常簡(jiǎn)單的,異步獲取用戶數(shù)據(jù),并且過(guò)濾掉年齡小于等于20歲的人后,將剩下的用戶數(shù)據(jù)返回的方法。
那么現(xiàn)在我希望你寫一個(gè)測(cè)試用例,測(cè)試一下你的“過(guò)濾”部分的邏輯?怎么辦?這時(shí)候如果不修改filterUsers
源碼就很難測(cè)試了,因?yàn)槔锩骜詈现鎸?shí)的ajax
異步請(qǐng)求,莫非測(cè)試一個(gè)小小的“過(guò)濾”邏輯,你還要搭一個(gè)服務(wù)器給她,然后寫各種不同的數(shù)據(jù)返回的服務(wù)么?這也活得太累了。
但如果我們把獲取異步數(shù)據(jù)的部分提取出去,像這樣:
var UserService = require('./UserService');var filterUsers = function(cb){ UserService .getUsers() .done(function(users){ var leftUsers = users.filter(user => user.age > 20); cb(leftUsers); }); }); };
這時(shí)候里面不再耦合那個(gè)具體的異步操作,而是引入了一個(gè)叫UserService
的模塊,那當(dāng)我們測(cè)試“過(guò)濾”部分邏輯的時(shí)候,只要替換掉這個(gè)UserService
,用一個(gè)返回假數(shù)據(jù)的模塊,就可以輕松的測(cè)試各種數(shù)據(jù)返回的情況下,“過(guò)濾”邏輯的工作狀況是否正常了。
這里就是把過(guò)濾用戶和獲取全部用戶數(shù)據(jù)兩個(gè)部分,解藕了哦!
添加回答
舉報(bào)