ÎÞÂÛÎÒÃÇʹÓúÍNodeÅäºÏÔÚÒ»ÆðµÄ²âÊÔ¿ò¼Ü£¬ÀýÈçMocha»òÕßJasmine£¬»¹ÊÇÔÚÏñPhantomJSÕâÑùµÄÎÞÍ·ä¯ÀÀÆ÷ÖÐÔËÐÐÒÀÀµÓÚDOMµÄ²âÊÔ£¬ºÍÒÔǰÏà±È£¬ÎÒÃÇÓиüºÃµÄ·½Ê½À´¶ÔJavaScript½øÐе¥Ôª²âÊÔ¡£
È»¶ø£¬Õâ²¢²»Òâζ×ÅÎÒÃÇÒª²âÊԵĴúÂë¾ÍÏñÎÒÃǵŤ¾ßÄÇÑùÈÝÒ×!×éÖ¯ºÍ±àдÒ×ÓÚ²âÊԵĴúÂëÐèÒª»¨·ÑһЩ¾«Á¦ºÍ²¢¶ÔÆä½øÐй滮£¬µ«ÊÇÔÚº¯Êýʽ±à³ÌµÄÆô·¢Ï£¬ÎÒÃÇ·¢ÏÖÁËһЩģʽ£¬µ±ÎÒÃÇÐèÒª²âÊÔÎÒÃǵĴúÂëʱ£¬ÕâЩģʽ¿ÉÒÔ°ïÖúÎÒÃDZÜÃâÄÇЩ¡°¿Ó¡±¡£ÔÚÕâÆªÎÄÕÂÖУ¬ÎÒÃÇ»á²é¿´Ò»Ð©ÓÐÓõÄСÌùÊ¿ºÍģʽ£¬À´°ïÖúÎÒÃÇÔÚJavaScriptÖбàд¿É²âÊԵĴúÂë¡£
±£³ÖÒµÎñÂß¼ºÍÏÔʾÂß¼·ÖÀë
¶ÔÓÚ»ùÓÚJavaScriptµÄä¯ÀÀÆ÷Ó¦ÓóÌÐòÀ´Ëµ£¬ÆäÖÐÒ»ÏîÖ÷Òª¹¤×÷¾ÍÊǼàÌýÖÕ¶ËÓû§´¥·¢µÄDOMʼþ£¬È»ºóͨ¹ýÔËÐÐһЩҵÎñÂß¼²¢ÔÚÒ³ÃæÉÏÏÔʾ½á¹û£¬ÒԴ˶ÔÓû§×ö³ö·´À¡¡£ÔÚ½¨Á¢DOMʼþ¼àÌýÆ÷µÄµØ·½£¬ÓÐʱ»áÓÕ»óÄã±àдһ¸öÄäÃûº¯ÊýÀ´Íê³ÉËùÓÐÕâЩ¹¤×÷¡£ÕâÑù´øÀ´µÄÎÊÌâÊÇΪÁ˲âÊÔÄäÃûº¯Êý£¬Äã²»µÃ²»È¥Ä£ÄâDOMʼþ¡£ÕâÑù²»½ö»áÔö¼Ó´úÂëÐÐÊý£¬¶øÇÒ»áÔö¼Ó²âÊÔÔËÐеÄʱ¼ä¡£

ÓëÖ®Ïà·´£¬±àдһ¸öÓÐÃû×ֵĺ¯Êý£¬È»ºó½«Æä´«¸øÊ¼þ´¦ÀíÆ÷¡£Í¨¹ýÕâÖÖ·½Ê½£¬Äã¿ÉÒÔÖ±½ÓÕë¶ÔÕâ¸öÓÐÃû×ֵĺ¯Êý±àд²âÊÔÓÃÀý£¬¶ø²»ÓÃÈ¥´¥·¢Ò»¸ö¼ÙµÄDOMʼþ¡£
Õâ²»½ö½ö¿ÉÒÔÓ¦Óõ½DOMÉÏ¡£ÔÚä¯ÀÀÆ÷ºÍNodeÉϵĺܶàAPI£¬¶¼±»Éè¼Æ³É´¥·¢ºÍ¼àÌýʼþ£¬»òÕߵȴýÆäËüÀàÐ͵ÄÒì²½¹¤×÷Íê³É¡£Æ¾¾Ñé˵£¬Èç¹ûÄã±àдÁË´óÁ¿µÄÄäÃû»Øµ÷º¯Êý£¬ÄÇôÄãµÄ´úÂë¿ÉÄܲ»»áÈÝÒ×±»²âÊÔ¡£
// hard to test $('button').on('click', () => { $.getJSON('/path/to/data') .then(data => { $('#my-list').html('results: ' + data.join(', ')); }); }); // testable; we can directly run fetchThings to see if it // makes an AJAX request without having to trigger DOM // events, and we can run showThings directly to see that it // displays data in the DOM without doing an AJAX request $('button').on('click', () => fetchThings(showThings)); function fetchThings(callback) { $.getJSON('/path/to/data').then(callback); } function showThings(data) { $('#my-list').html('results: ' + data.join(', ')); } |
¶ÔÒì²½´úÂëʹÓûص÷»òÕßPromise
ÔÚÉÏÊöµÄʾÀý´úÂëÖУ¬ÎÒÃǾ¹ýÖØ¹¹µÄº¯ÊýfetchThings»áÔËÐÐÒ»¸öAJAXÇëÇó£¬ÒÔÒì²½µÄ·½Ê½Íê³ÉÁ˴󲿷ֹ¤×÷¡£ÕâÒâζ×ÅÎÒÃDz»ÄÜÔËÐк¯Êý²¢²âÊÔËüÊÇ·ñ°´ÕÕÎÒÃÇÔ¤ÆÚµÄÄÇÑùÔËÐУ¬ÒòΪÎÒÃDz»ÖªµÀËüʲôʱºòÔËÐÐÍê¡£
½â¾öÕâ¸öÎÊÌâ×î³£¼ûµÄ·½·¨£¬ÊÇÏòº¯ÊýÖд«µÝÒ»¸ö»Øµ÷º¯Êý×÷Ϊ²ÎÊý£¬×÷ΪÒì²½µ÷Óá£ÕâÑù£¬ÔÚÄãµÄµ¥Ôª²âÊÔÖУ¬Äã¿ÉÒÔÔÚ´«µÝµÄ»Øµ÷º¯ÊýÖÐÔËÐÐһЩ¶ÏÑÔ¡£

ÁíÍâÒ»ÖÖ³£¼û²¢ÇÒÔ½À´Ô½Á÷ÐеÄ×éÖ¯Òì²½´úÂë·½·¨£¬ÊÇʹÓÃPromise APIµÄ·½Ê½¡£ÐÒÔ˵ÄÊÇ£¬$.ajaxºÍÆäËü´ó²¿·ÖjQueryµÄÒì²½º¯ÊýÒѾ·µ»ØÁËPromise¶ÔÏó£¬Òò´ËËüÒѾº¸ÇÁ˴󲿷ֳ£¼ûµÄÓÃÀý¡£
// ºÜÄѲâÊÔ£»ÎÒÃDz»ÖªµÀAJAXÇëÇó»áÔËÐж೤ʱ¼ä function fetchData() { $.ajax({ url: '/path/to/data' }); } //¿É²âÊԵģ»ÎÒÃÇ´«ÈëÒ»¸ö»Øµ÷º¯Êý£¬È»ºóÔÚÆäÖÐÔËÐжÏÑÔ function fetchDataWithCallback(callback) { $.ajax({ url: '/path/to/data', success: callback, }); } //ͬÑù¿É²âÊԵģºÔÚ·µ»ØµÄPromise½âÎöÍêºó£¬ÎÒÃÇ¿ÉÒÔÔËÐжÏÑÔ function fetchDataWithPromise() { return $.ajax({ url: '/path/to/data' }); } |
±ÜÃ⸱×÷ÓÃ
Òª±àдÄÇЩʹÓòÎÊý²¢ÇÒ·µ»ØÖµ½ö½öÒÀÀµÄÇЩ²ÎÊýµÄº¯Êý£¬¾ÍÏñ½«Êý×Ö´«ÈëÊýѧ¹«Ê½£¬È»ºóÈ¡µÃ½á¹û¡£Èç¹ûÄãµÄº¯ÊýÒÀÀµÓÚһЩÍⲿµÄ״̬(ÀýÈçÀàʵÀýµÄÊôÐÔ»òÕßijЩÎļþµÄÄÚÈÝ)£¬ÄÇôÄãÔÚ²âÊÔÕâ¸öº¯Êý֮ǰ£¬¾Í²»µÃ²»È¥ÉèÖÃһЩ״̬£¬ÔÚ²âÊÔÓÃÀýÖÐÐèÒª¸ü¶àµÄÉèÖá£Äã²»µÃ²»È¥ÈÏΪÄÇЩÕýÔÚÔËÐеĴúÂë²»»áÐÞ¸Äͬһ¸öµÄ״̬¡£

ͬÑù£¬ÄãÐèÒª±ÜÃâ±àдÄÇЩ»áÐÞ¸ÄÍⲿ״̬µÄº¯Êý£¬ÀýÈçÏòÎļþдÈëÄÚÈÝ»òÕßÏòÊý¾Ý¿â±£´æÊý¾Ý¡£Õâ»á±ÜÃâһЩ¸±×÷Óã¬À´Ó°ÏìÄã²âÊÔÆäËû´úÂëµÄÄÜÁ¦¡£Ò»°ãÀ´Ëµ£¬×îºÃÊǽ«¸±×÷ÓúʹúÂë¿ØÖÆÔÚÒ»Æð£¬Èá°±íÃæ»ý¡±¾¡¿ÉÄÜС¡£¶ÔÓÚÀàºÍ¶ÔÏóʵÀýÀ´Ëµ£¬Àà·½·¨µÄ¸±×÷ÓÃÓ¦¸Ã±»ÏÞÖÆÔÚ±»²âÊÔµÄÀàʵÀýµÄ·¶Î§ÄÚ¡£
// ºÜÄѲâÊÔ£»ÎÒÃDz»µÃ²»ÉèÖÃÒ»¸öglobalListOfCars¶ÔÏóºÍÒ»¸öÃûΪ#list-of-modelsµÄDOM½á¹¹£¬È»ºó²ÅÄܲâÊÔÕâ¶Î´úÂë function processCarData() { const models = globalListOfCars.map(car => car.model); $('#list-of-models').html(models.join(', ')); } // ÈÝÒײâÊÔ£»ÎÒÃÇ´«µÝÒ»¸ö²ÎÊýÈ»ºó²âÊÔËüµÄ·µ»ØÖµ£¬¶ø²»ÐèÒªÉèÖÃÈκÎÈ«¾Ö±äÁ¿»òÕß¼ì²éÈκÎDOM½á¹û function buildModelsString(cars) { const models = cars.map(car => car.model); return models.join(','); } |
ʹÓÃÒÀÀµ×¢Èë
ÔÚº¯ÊýÖУ¬ÓÐÒ»ÖÖͨÓõÄģʽ£¬¿ÉÒÔÓÃÀ´½µµÍ¶ÔÍⲿ״̬µÄʹÓã¬Õâ¾ÍÊÇÒÀÀµ×¢Èë
¡ª¡ª ½«º¯ÊýµÄËùÓÐÍⲿÐèÒª¶¼Í¨¹ýº¯Êý²ÎÊýµÄ·½Ê½´«µÝ¸øº¯Êý¡£
// ÒÀÀµÓÚÒ»¸öÍⲿ״̬Êý¾ÝÁ¬½ÓʵÀý£»ºÜÄѲâÊÔ function updateRow(rowId, data) { myGlobalDatabaseConnector.update(rowId, data); } // ½«Êý¾Ý¿âÁ¬½ÓʵÀý×÷Ϊ²ÎÊý´«µÝ¸øº¯Êý£»ºÜÈÝÒײâÊÔ¡£ function updateRow(rowId, data, databaseConnector) { databaseConnector.update(rowId, data); } |
ʹÓÃÒÀÀµ×¢ÈëµÄÒ»¸öÖ÷ÒªºÃ´¦£¬ÊÇÄã¿ÉÒÔÔÚµ¥Ôª²âÊÔÖд«Èëmock¶ÔÏó£¬ÕâÑù¾Í²»»áµ¼ÖÂÕæµÄ¸±×÷ÓÃ(ÔÚÕâ¸öÀý×ÓÖУ¬¾ÍÊǸüÐÂÊý¾Ý¿âÐÐ)£¬ÄãÖ»ÐèÒª¶ÏÑÔÄãµÄmock¶ÔÏóÊǰ´ÕÕÆÚÍûµÄ·½Ê½ÔËÐм´¿É¡£
Ϊÿһ¸öº¯ÊýÉèÖÃÒ»¸öΨһµÄÄ¿µÄ
½«³¤º¯Êý·Ö½â³ÉһϵÁÐСµÄ¡¢µ¥Ò»Ö°ÔðµÄº¯Êý¡£ÕâÑùÎÒÃÇ¿ÉÒÔ¸üÈÝÒ×µÄÈ¥²âÊÔÿһ¸öº¯ÊýÊÇ·ñÊÇÕýÈ·µÄ£¬¶ø²»ÔÙÏ£ÍûÒ»¸ö´óº¯ÊýÔÚ·µ»Ø½á¹û֮ǰ¾ÍÕýÈ·µÄ×öÁËËùÓеÄÊÂÇé¡£
ÔÚº¯Êýʽ±à³ÌÖУ¬½«¼¸¸öµ¥Ò»Ö°ÔðµÄº¯ÊýÆ´ÔÚÒ»ÆðµÄÐÐΪ³Æ×÷¡°×éºÏ¡±¡£Underscore.jsÉõÖÁÓÐÒ»¸öÃûΪ_.composeµÄº¯Êý£¬Ëü½«Ò»¸öº¯ÊýÁбíÖеĺ¯Êý´®ÔÚÒ»Æð£¬½«Ã¿Ò»º¯ÊýµÄ·µ»Ø½á¹û×÷ΪÊäÈë´«µÝ¸øÏÂÒ»¸öº¯Êý¡£
// ºÜÄѲâÊÔ function createGreeting(name, location, age) { let greeting; if (location === 'Mexico') { greeting = '!Hola'; } else { greeting = 'Hello'; } greeting += ' ' + name.toUpperCase() + '! '; greeting += 'You are ' + age + ' years old.'; return greeting; } // ºÜÈÝÒײâÊÔ function getBeginning(location) { if (location === 'Mexico') { return '?Hola'; } else { return 'Hello'; } } function getMiddle(name) { return ' ' + name.toUpperCase() + '! '; } function getEnd(age) { return 'You are ' + age + ' years old.'; } function createGreeting(name, location, age) { return getBeginning(location) + getMiddle(name) + getEnd(age); } |
²»Òª¸Ä±ä²ÎÊý
ÔÚJavaScriptÖУ¬Êý×éºÍ¶ÔÏ󴫵ݵÄÊÇÒýÓ㬶ø·ÇÖµ£¬Òò´ËËüÃÇÊǿɱäµÄ¡£ÕâÒâζ×ŵ±Ä㽫¶ÔÏó»òÕßÊý×é×÷Ϊ²ÎÊý´«µÝ¸øº¯Êýʱ£¬ÄãµÄ´úÂëºÍʹÓÃÄã´«µÝµÄ¶ÔÏó»òÊý×éµÄº¯Êý£¬¶¼ÓÐÄÜÁ¦È¥ÐÞ¸ÄÄÚ´æÖÐͬһ¸öÊý×é»òÕß¶ÔÏó¡£ÕâÒâζ×ŵ±Äã²âÊÔÄã×Ô¼ºµÄ´úÂëʱ£¬Äã±ØÐëÐÅÈÎËùÓÐÄãµ÷Óõĺ¯ÊýÖУ¬Ã»ÓÐÈκκ¯Êý»áÐÞ¸ÄÄãµÄ¶ÔÏó¡£Ã¿µ±ÄãÌí¼ÓһЩеĿÉÒÔÐÞ¸Äͬһ¸ö¶ÔÏóµÄ´úÂëʱ£¬¸ú×Ù¶ÔÏóÓ¦¸ÃÊÇʲôÑù×Ӿͻá±äµÃÔ½À´Ô½À§ÄÑ£¬´Ó¶ø¸üÄÑÈ¥²âÊÔËüÃÇ¡£

Ïà·´£¬µ±ÄãÓÐÒ»¸öº¯ÊýÐèҪʹÓöÔÏó»òÕßÊý×éʱ£¬ÄãÓ¦¸ÃÔÚ´úÂëÖжԴý¶ÔÏó»òÕßÊý×é¾ÍÏñËüÃÇÊÇÖ»¶ÁµÄ¡£Äã¿ÉÒÔ¸ù¾ÝÐèÒª´´½¨ÐµĶÔÏó»òÕßÊý×飬Ȼºó¶ÔÆëÌî³ä¡£»òÕߣ¬Ê¹ÓÃUndersocre»òÕßLodashÈ¥¶Ô´«ÈëµÄ¶ÔÏó»òÕßÊý×é×öÒ»¸ö¿½±´£¬È»ºóÔÙ¶ÔÆë½øÐвÙ×÷¡£¸üºÃµÄÑ¡ÔñÊÇ£¬Ê¹ÓÃһЩÏñImmutable.jsÕâÑùµÄ¹¤¾ß£¬È¥´´½¨Ö»¶ÁµÄÊý¾Ý½á¹¹¡£
// ÐÞ¸ÄÁË´«ÈëµÄ¶ÔÏó function upperCaseLocation(customerInfo) { customerInfo.location = customerInfo.location.toUpperCase(); return customerInfo; } // ·µ»ØÁËÒ»¸öеĶÔÏó function upperCaseLocation(customerInfo) { return { name: customerInfo.name, location: customerInfo.location.toUpperCase(), age: customerInfo.age }; } |
ÔÚ±àÂë֮ǰÏÈд²âÊÔ
ÔÚ±àÂë֮ǰÏÈдµ¥Ôª²âÊԵĹý³Ì±»³Æ×÷²âÊÔÇý¶¯¿ª·¢(TDD)¡£´óÁ¿µÄ¿ª·¢Õß·¢ÏÖTDD·Ç³£ÓÐÓá£
ͨ¹ýÏȱàд²âÊÔÓÃÀý£¬Äã¾ÍÇ¿ÆÈ×Ô¼º´ÓʹÓÃÄã´úÂëµÄ¿ª·¢Õ߽ǶÈÀ´¿¼ÂÇÄãÒª±©Â¶µÄAPI£¬Ëü»¹°ïÖúÄãÈ·±£ÄãÖ»»á±àд×ã¹»µÄ´úÂëÀ´Âú×ã²âÊÔÓÃÀýµÄÒªÇ󣬶ø²»Òª¶Ô½â¾ö·½°¸¡°¹ý¶ÈÊ©¹¤¡±£¬´Ó¶ø´øÀ´²»±ØÒªµÄ¸´ÔÓÐÔ¡£
ÔÚʵ¼ùÖУ¬TDD×÷ΪһÌõ¼ÍÂÉ£¬Òª¸²¸ÇËùÓеĴúÂë¸Ä¶¯¿ÉÄÜ»á±È½ÏÀ§ÄÑ¡£µ«Êǵ±Ëü¿´ÉÏÈ¥ÖµµÃ³¢ÊÔµÄʱºò£¬Õâ¾ÍÊÇÒ»¸öºÜºÃµÄ·½Ê½À´±£Ö¤ÄãµÄËùÓдúÂë¶¼ÊǿɲâÊԵġ£
×ܽá
ÔÚ±àдºÍ²âÊÔ¸´ÔÓµÄJavaScriptÓ¦ÓõÄʱºò£¬ÎÒÃǶ¼ÖªµÀÓÐһЩºÜÈÝÒ×Óöµ½µÄ¡°ÏÝÚ塱£¬µ«ÎÒÏ£Íûͨ¹ýÕâЩÌùÊ¿ºÍÌáÐÑ£¬¿ÉÒÔÈÃÎÒÃǵĴúÂ뾡Á¿¼òµ¥ºÍº¯Êý»¯£¬ÎÒÃÇ¿ÉÒÔ×öµ½ÈòâÊÔ¸²¸ÇÂʺܸߣ¬ÈÃÕûÌåµÄ´úÂ븴ÔÓÐԺܵÍ!
|