当前位置: 首页 > Web前端 > vue.js

Mock既是盾牌又是武器

时间:2023-03-31 16:07:32 vue.js

鍓嶇mock寮€鍙戞ā寮忎竴鑸槸鍓嶅悗绔垎绂伙紝鐩镐簰鈥滆縼灏扁€濆湪鎵€闅惧厤銆傚偦绛夛紝浣嗘槸濡傛灉涓嶈仈璋冨紑鍙戯紝寰堝缁嗚妭閮介【涓嶄笂锛岃€屼笖寰堝鏄撳湪椤圭洰鍗冲皢浜ゆ帴鐨勬椂鍊欐帴鍙f斁鍑烘潵锛堣繖閲屼笉鑳界嫮闅樼殑璁や负閭d釜鍚庡彴鏄晠鎰忕殑锛屽氨鏄彍锛夛紝鑱旇皟鐨勬椂鍊欏彂鐜板緢澶氶棶棰樼殑鏃跺€欏氨澶按灏簡銆傚鏋滄湁寤惰繜锛岄攨寰堝鏄撶洊浣忓墠绔殑澶撮儴銆傛垜浠緱鎯充釜鍔炴硶锛氣€滆鈥濆悗鍙版彁閫燂紝淇濊瘉璐ㄩ噺銆傝繖鏄竴绉嶆柟寮忋€傛瘡娆℃垜涓嶅緱涓嶉棶锛岃鎷滄墭銆傦紙涓轰簡瀹夊績寰€寰€娌′粈涔堢敤銆傘€傘€傦級鑷繁mock鐣岄潰锛屾洿濂界殑鍜屽悗鍙扳€滃紓姝モ€濆紑鍙戯紝蹇€熸帹杩涘墠绔伐浣滆繘搴︼紝灏藉揩鏆撮湶闂锛屼负鑷繁浜夊彇鏇村鐨勬椂闂磋В鍐冲畠浠€傚浣曚娇鐢╩ock鍏堝畨瑁卪ockjsyarnadd-Dmockjs鐒跺悗鐪嬬湅浣犵殑缃戠粶璇锋眰搴撶敤鐨勬槸浠€涔堬細__axios__:...importMockfrom'mockjs'...Mock.mock(apiUrl,mock)...__fetch__:浣犲繀椤讳笓闂ㄥ鐞嗗畠銆傞鍏堝畨瑁卪ockjs-fetchyarnadd-Dmockjs-fetch鐒跺悗...importMockfrom'mockjs'importmockFetchfrom'mockjs-fetch';妯℃嫙鑾峰彇锛堟ā鎷燂級锛?..Mock.mock(apiUrl,mock)鍩烘湰鎿嶄綔鍒拌繖閲屽氨瀹屾垚浜嗭紝浣嗚繖杩樹笉澶熴€傚浣曚紭闆呭湴浣跨敤妯℃嫙锛熸垜瑙佽繃寰堝椤圭洰锛岀粡甯稿啓涓€鍫嗐€?..Li馃尠:importMockfrom'mockjs'import{builder,getBody}from'../util'constlogin=options=>{constbody=getBody(options)returnbuilder({id:Mock.mock('@guid'),//杩欎釜@鏄痬ockJs鐨勫崰浣嶇锛屽ぇ瀹跺彲浠ュ幓瀹樼綉浜嗚В涓€涓嬶紝杩欎釜涓嶉噸瑕侊紝鎴戜滑涓昏浠g爜瀹℃牳name:Mock.mock('@name'),username:'admin',password锛?'锛屽ご鍍忥細'https://gw.alipayobjects.com/zos/rmsportal/jZUIxmJycoymBprLOUbT.png'锛岀姸鎬侊細1锛岀數璇濓細''锛宭astLoginIp锛?27.154.74.117'锛宭astLoginTime锛?534837621348锛宑reatorId锛?admin',createTime:1497160610259,deleted:0,roleId:'admin',lang:'zh-CN',token:'4291d7da9005377ec9aec4a71ea837f'},'',200)}Mock.mock(/\/auth\/login/,'post',login)棣栧厛锛岃鎴戜滑鍙戣〃璇勮銆備笉鐭ラ亾鏄笉鏄垜鈥滃缇庘€濈殑闂銆傛垜璁や负杩欐牱鐨勪唬鐮佹湁浜涚鎷欍€侰odeReview锛氬厛鍦╤ead閲屽紩鍏ockjs鐒跺悗寮曞叆涓や釜瀹炵敤鍑芥暟锛屽厛涓嶇import{builder,getBody}from'../util'Mock.mock(/\/auth\/login/,'post',login)鐒跺悗鎵цmock__evaluation__:em~~~锛屾瘡娆″啓mock妯″潡锛岄兘浼氬紩鐢╩ockjs搴撱€傝櫧鐒跺彧鏈変竴娆¢噸澶嶏紝__浣嗚繕鏄彲浠ュ繊鍙梍_銆俥m~~~锛屼负浠€涔堣寮曠敤instrumentalfunctions锛屼负浠€涔堣鐞嗚Вinstrumentalfunctions锛岃繕鏄袱涓紒濡傛灉鏄疄鐜拌秴鍑哄熀鏈琺ock鐨勫姛鑳借寖鍥达紝閭e氨涓嶅ソ璇翠簡锛屼笉杩囧氨鏄竴涓畝鍗曠殑mock锛屾湁鐐广€?.锛宊_unbearable__銆備粈涔堬紒锛侊紒锛宮ock鐨勬帴鍙e湴鍧€鍏跺疄鏄€渉ard鈥濈殑锛屾兂鎯宠hardcoding鏀厤鐨勬亹鎯э紝杩欑畝鐩村氨鏄紝__cannotbear锛宑annotbear__锛侊紒锛乢_鎬荤粨__锛氶噸澶嶏紙鍗充娇鍙湁鍑犻」锛夛紝鍏虫敞鐐瑰锛堝嵆浣垮彧鏈夊嚑椤癸級锛岀‖缂栫爜锛堝嵆浣垮彧鏈変竴椤癸級锛岄噸鏋勮兘鍔涗笉鍫€傛垜浠氨鏄兂mock鏁版嵁锛岄殢渚跨偣锛岃嚜鐒朵竴鐐逛篃涓嶅ソ锛屽氨鍍忓瓧闈㈡剰鎬濓紝灏辨槸鎯斥€渕ock鈥濅竴涓€渁pi鈥濄€傚鏋渁pi鏄繖鏍风殑锛歩mportBaseApifrom'./baseApi'letconfig={fetchLightAdd:"/light/fetchLightAdd",fetchLightUpdate:"/light/fetchLightUpdate",fetchLightDetail:"/light/fetchLightDetail",fetchTestDataList:"/light/fetchTestDataList",}exportdefaultnewBaseApi({config})閭d箞棰勬湡鐨勬ā鎷熷簲璇ユ槸杩欐牱鐨勶細importBaseMockfrom'./baseMock'letconfig={fetchLightAdd:{...},fetchLightUpdate:{...},fetchLightDetail:(data)=>{const{body={}}=data;璁﹑arams=JSON.parse(body);//杩欓噷閽堝涓嶅悓鐨勬ā鎷熻緭鍏ユ潯浠舵挱鏀句笉鍚岀殑缁撴灉銆俰f(params.id==="0"){return{code:"200",data:[{lightName:"test_lightName_0",comment:"test_comment_0",lightItems:[{lightItemId:1,lightType:0,baseSelect:1,exclude:false}]}]}}elseif(params.id==="1"){return{code:"200",鏁版嵁:[{lightName:"test_lightName_1",comment:"test_comment_1",lightItems:[{lightItemId:1,lightType:0,baseSelect:0,exclude:0},{lightItemId:2,lightType:1,baseSelect:1,exclude:false}]}]}}},fetchTestDataList:{...}}exportdefaultfunctionmock(api){newBaseMock({config,apiConfig:api.getUrlConfig()})}鎴戜滑鍐峜odeReview涓€涓嬶細棣栧厛锛屾瘡涓枃浠跺紩鍏ockjs:瑙e喅馃啑锛宔m~~~鍘熸潵BaseMock鏄粙缁嶐煒傦紝锛堟湰鏉ユ兂鎶婅繖鍙ヨ瘽鐪佷笅鏉ワ紝浣嗘槸鍙堟媴蹇冧唬鐮佷笉濂界悊瑙f槸鐨勶紝涓嶇劧宸偣鎷斿垁馃惗锛夐噸鐐癸細瑙e喅馃啑Hardcoding锛氳В鍐仇焼梍_鎬荤粨__锛氬氨鏄竴涓畝鍗曠殑鏁版嵁缁撴瀯锛屾彁渚涚粰浣狅紝閰嶇疆灏辩粨鏉熶簡銆傚鏋滀綘鎯砿ock鍝釜鎺ュ彛锛屽氨鍐欒繖涓帴鍙g殑鍚嶅瓧鐪熸槸瀛楅潰鎰忔€濓細鎴戣鈥渕ock鈥濅竴涓€渁pi鈥濓紝浣犱笉鐢ㄧ鍒汉銆傚氨杩欎箞绠€鍗曪紝鍒繕浜唌ock鍙湪寮€鍙戞ā寮忎笅浣跨敤銆傛牴鎹幆澧冨姩鎬佸紩鍏ワ細{/*configuremockstartup*/const{NODE_ENV,MOCK}=process.env;if(NODE_ENV==="development"){if(MOCK!="none"){require('MOCK');}}}鍙戝竷鎵撳寘鐨勬椂鍊欏幓鎺夛紝鏄笉鏄鍖呭彉灏忎笉濂斤細閰嶇疆webpak鐨刼ptions://isEnvProduction鏍规嵁process.env.NODE_ENVdeexternals:isEnvProduction?{mockjs:mockjs}鐨勫€煎垽鏂細{}package鏉ョ湅鐪嬶細棣栧厛锛孧oderate鐨勬墦鍖呴€熷害杩樻槸寰堝揩鐨勶紝鎵?1s锛屽樋鍢筐煒佺劧鍚庣湅鎶ュ憡锛氱粨璇棶鍒汉涓嶅鑷繁鏉ャ€侻ock纭疄鍙互鍑忚交寰堝鍘嬪姏銆傚墠绔笉绠€鍗曪紝ta鐨勯毦搴﹀嵈涓嶅皬銆傞偅绉崀~~鐨勫洶闅撅紝ta鐪熺殑鏄偅绉嶏紝閭g闅惧緱鐨勶紝绁炵粡鐥呬竴鏍风殑鍥伴毦銆傛墽琛屾€濇兂馃尠