Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
javascriptµ¥Ôª²âÊÔ£¨ÉÏ£©
 
×÷ÕߣºœÔÁÜ À´Ô´£º²©¿ÍÔ° ·¢²¼ÓÚ 2015-8-13
  2634  次浏览      27
 

1. ʲôÊǵ¥Ôª²âÊÔ

ÔÚ¼ÆËã»ú±à³ÌÖУ¬µ¥Ôª²âÊÔ£¨ÓÖ³ÆÎªÄ£¿é²âÊÔ£©ÊÇÕë¶Ô³ÌÐòÄ£¿é(Èí¼þÉè¼ÆµÄ×îСµ¥Î»)À´½øÐÐÕýÈ·ÐÔ¼ìÑéµÄ²âÊÔ¹¤×÷¡£³ÌÐòµ¥ÔªÊÇÓ¦ÓõÄ×îС¿É²âÊÔ²¿¼þ¡£ÔÚ¹ý³Ì»¯±à³ÌÖУ¬Ò»¸öµ¥Ôª¾ÍÊǵ¥¸ö³ÌÐò¡¢º¯Êý¡¢¹ý³ÌµÈ£»¶ÔÓÚÃæÏò¶ÔÏó±à³Ì£¬×îСµ¥Ôª¾ÍÊÇ·½·¨£¬°üÀ¨»ùÀࣨ³¬Àࣩ¡¢³éÏóÀà¡¢»òÕßÅÉÉúÀࣨ×ÓÀࣩÖеķ½·¨¡£

ÿ¸öÀíÏëµÄ²âÊÔ°¸Àý¶ÀÁ¢ÓÚÆäËü°¸Àý£»Îª²âÊÔʱ¸ôÀëÄ£¿é£¬¾­³£Ê¹ÓÃstubs¡¢mock »òfakeµÈ²âÊÔÂí¼×³ÌÐò¡£µ¥Ôª²âÊÔͨ³£ÓÉÈí¼þ¿ª·¢ÈËÔ±±àд£¬ÓÃÓÚÈ·±£ËûÃÇËùдµÄ´úÂë·ûºÏÈí¼þÐèÇóºÍ×ñÑ­¿ª·¢Ä¿±ê¡£

µ¥Ôª²âÊÔµÄÄ¿±êÊǸôÀë³ÌÐòÄ£¿é²¢Ö¤Ã÷ÕâЩµ¥¸öÄ£¿éÊÇÕýÈ·µÄ¡£µ¥Ôª²âÊÔÄÜÈ·±£ÔÚ¿ª·¢¹ý³ÌµÄÔçÆÚ¾ÍÄÜ·¢ÏÖÎÊÌ⣬ÊÇΪÁËÈóÌÐò¡°ËÀµÃ¸üÔ硱¡£ÎÒÃÇÓ¦¸Ã´Ó¿ª·¢µÄÔçÆÚ¾ÍΪËùÓк¯ÊýºÍ·½·¨±àдµ¥Ôª²âÊÔ£¬¿É¶ÁÐÔÇ¿µÄµ¥Ôª²âÊÔ¿ÉÒÔʹ³ÌÐòÔ±·½±ãµØ¼ì²é´úÂëÆ¬¶ÏÊÇ·ñÒÀÈ»Õý³£¹¤×÷¡£Á¼ºÃÉè¼ÆµÄµ¥Ôª²âÊÔ°¸Àý¸²¸Ç³ÌÐòµ¥Ôª·ÖÖ§ºÍÑ­»·Ìõ¼þµÄËùÓз¾¶¡£²ÉÓÃÕâÖÖ×Ôµ×ÏòÉϵIJâÊÔ·¾¶£¬ÏȲâÊÔ³ÌÐòÄ£¿éÔÙ²âÊÔÄ£¿éµÄ¼¯ºÏ£¬Ò»µ©±ä¸üµ¼Ö´íÎó·¢Éú£¬½èÖúÓÚµ¥Ôª²âÊÔ¿ÉÒÔ¿ìËÙ¶¨Î»²¢ÐÞ¸´´íÎó¡£

2. JavaScriptµ¥Ôª²âÊÔÏÖ×´

µ¥Ôª²âÊÔÔÚºǫ́¿ª·¢Öзdz£Á÷ÐÐºÍÆÕ¼°£¬±ÈÈçJAVA¿ª·¢ÕßµÄJUnitµÈ£¬¶øÔÚǰ¶Ë¿ª·¢ÖÐÔòʹÓõķdz£ÉÙ¡£¾¿ÆäÔ­Òò£¬Ö÷ÒªÊǵ¥Ôª²âÊÔ¸üÊÊÓÃÓÚÂß¼­´úÂëµÄ²âÊÔ£¬Õâ¶ÔÓÚJAVAµÈºǫ́±à³ÌÓïÑÔÀ´Ëµ²âÊÔÆðÀ´·Ç³£·½±ã£¬µ«ÊÇǰ¶Ë¿ª·¢ºÜ¶àʱºòÒªÒªUI´ò½»µÀ£¬UIÏà¹ØµÄ´úÂë²»ÊDz»¿ÉÒÔ½øÐе¥Ôª²âÊÔ£¬µ«µÄÈ·ºÜÂé·³£¬±ÈÆðÂß¼­´úÂëÀ´ËµÀ§ÄѶàÁË£¬Õâ¾Íµ¼ÖÂÁ˵¥Ôª²âÊÔÔÚǰ¶Ë¿ª·¢Ã»ÓÐÆÕ¼°ÆðÀ´¡£

µ«ÊÇËæ×ŵ¥Ôª²âÊÔµÄÆÕ¼°£¬ÓÈÆäÊÇÃô½Ý¿ª·¢µÄÍÆ¶¯£¬Ó¿ÏÖÁËÐí¶àÓÅÐãµÄJavaScriptµ¥Ôª²âÊÔ¿ò¼Ü£¬ÈçQUnit¡¢JasmineµÈ¡£ËùÓеÄÕâЩ¿ò¼Ü»ù±¾É϶¼ÄܶÔJavascript´úÂë½øÐкܺõIJâÊÔ£¬µ±È»UI²¿·ÖµÄ´úÂë²âÊÔÒ»Ñù±È½ÏÂé·³£¬µ«ÊÇÎÒÃÇ¿ÉÒÔͨ¹ý¾«ÐĹ¹ÔìÎÒÃǵIJâÊÔ´úÂëÀ´²âÊÔ²¿·ÖUI´úÂë¡£µ«ÊÇÿ¸ö¿ò¼Ü¶¼²»ÊÇÍòÄܵģ¬ËüÃǶ¼Óи÷×ÔÉó¤µÄÁìÓò£¬ÏÂÃæÑ¡È¡Á˼¸¸ö¾ßÓдú±íÐԵĿò¼Ü½øÐнéÉÜ¡£

3. µ¥Ôª²âÊÔ³£Óÿò¼Ü

QUnit¿ò¼Ü

a) ¼ò½é

QUnitÊÇjQueryÍŶӿª·¢µÄJavaScriptµ¥Ôª²âÊÔ¹¤¾ß£¬¹¦ÄÜÇ¿´óÇÒʹÓüòµ¥¡£Ä¿Ç°ËùÓеÄJQuery´úÂ붼ʹÓÃQUnit½øÐвâÊÔ£¬Ô­ÉúµÄJavaScriptÒ²¿ÉÒÔʹÓÃQUnit¡£

×î³õ£¬John Resig½«QUnitÉè¼ÆÎªjQueryµÄÒ»²¿·Ö¡£2008Ä꣬QUnit²ÅÓÐÁË×Ô¼ºµÄÃû×Ö¡¢Ö÷Ò³ºÍAPIÎĵµ£¬Ò²¿ªÊ¼ÔÊÐíÆäËûÈËÓÃËüÀ´×öµ¥Ôª²âÊÔ¡£µ«µ±Ê±QUnit»¹ÊÇ»ùÓÚjQueryµÄ¡£Ö±µ½2009Ä꣬QUnit²Å¿ÉÒÔÍêÈ«µÄ¶ÀÁ¢ÔËÐС£

b) Óŵã

ʹÓÃÆðÀ´·Ç³£·½±ã£¬ÓÐÆ¯ÁÁµÄÍâ¹ÛºÍÍêÕûµÄ²âÊÔ¹¦ÄÜ£¨°üÀ¨Òì²½²âÊÔ£©£»

·Ç³£¼òµ¥£¬ÈÝÒ×ÉÏÊÖ£¬Ä¿Ç°¹«¿ªµÄAPIÖ»ÓÐ19¸ö£»

²»ÐèÒªÒÀÀµÆäËüÈκÎÈí¼þ°ü»ò¿ò¼Ü£¬Ö»ÒªÄÜÔËÐÐJSµÄµØ·½¾Í¿ÉÒÔ£¬QUnit±¾ÉíÖ»ÓÐÒ»¸öJSÎļþºÍCSSÎļþ£¬µ±È»Èç¹ûÐèÒª¿ÉÒÔºÍjQueryµÈÆäËü¿ò¼Ü¼¯³É£»

²»½öÖ§³ÖÔÚä¯ÀÀÆ÷ÖвâÊÔ£¬»¹Ö§³ÖÔÚRhinoºÍnode.jsµÈºó¶Ë²âÊÔ

c) ²»×ã

¶Ô×Ô¶¯»¯Ö§³Ö²»ºÃ£¬ºÜÄѺÍAnt¡¢Maven»ò×Ô¶¯¹¹½¨µÈ¹¤¾ß¼¯³É£¬Ö÷ÒªÓÃÔÚä¯ÀÀÆ÷ÖнøÐвâÊÔ¡£

d) API

QUnitËùÓеÄAPI¿ÉÒÔ·ÖΪÈýÀࣺSetup£¬Assertions£¬Asynchronous Testing£¬ÏÂÃæ¾Í·Ö±ð¶ÔÕâЩAPI×öЩ½éÉÜ£º

Setup:

test( name, [expected], testFun ) ´ú±íQUnitÖеÄÒ»¸ö²âÊÔ

name£ºÒª²âÊÔµÄÃû³Æ£¬±ÈÈç¡°¼Ó·¨º¯Êý¡±»ò¡°add¡±µÈ

expected£º¿ÉÑ¡²ÎÊý£¬ÓÃÀ´±íʾ¸Ã²âÊÔº¯ÊýµÄ¶ÏÑÔµÄÊýÁ¿£¬ÊǸöÕýÕûÊý

testFun£ºÒ»¸öº¯Êý£¬ËùÓеIJâÊÔ´úÂë¶¼Ó¦¸Ã°üÀ¨Ôڸú¯ÊýÀͨ³£ÕâÊÇÒ»¸öÄäÃûº¯Êý¡£

Àý£º

test(¡°add function¡±, 1, function() {
equal(add(1, 2), 3);
});

asyncTest( name, [expected], testFun ) ´ú±íQUnitÖеÄÒ»¸öÒì²½²âÊÔ£¬²ÎÊýͬtest

expect( amount ) ÓÃÔÚ²âÊÔº¯ÊýÖУ¬ÓÃÓÚÉùÃ÷²âÊÔ¶ÏÑÔµÄÊýÁ¿£¬Õâ¸öº¯ÊýºÍtestÖеÄexpected²ÎÊýµÄ×÷ÓÃÊÇÒ»ÑùµÄ¡£Ö÷Òª×÷ÓþÍÊǼì²éÄãÉùÃ÷µÄ¸öÊýºÍÄãдµÄ¶ÏÑÔµÄʵ¼Ê¸öÊýÊÇ·ñÒ»Ö¡£

module( name, [lifecycle] ) Ö÷ÒªÓÃÓÚ²âÊÔº¯ÊýµÄ·Ö×飬һ¸ömoduleº¯ÊýΪһ¸ö·Ö×飬±ÈÈçmodule(¡°validate¡±)±íʾºóÃæµÄ²âÊÔÓÃÀý¶¼ÊÇvalidateÏà¹ØµÄ´úÂ룬»òÕßmodule(¡°common.js¡±)£¬±íÃ÷ºóÃæµÄ²âÊÔÓÃÀý¶¼ÊÇcommon.jsÀïÃæµÄ´úÂë¡£Ò»¸ö²âÊÔÎļþ¿ÉÒÔд¶à¸ömodule¡£

name£º·Ö×é»òÕßÄ£¿éµÄÃû³Æ

lifecycle£º¿ÉÑ¡²ÎÊý£¬ËüÊÇÒ»¸ö¶ÔÏ󣬿ÉÒÔÉèÖÃsetupºÍteardown»Øµ÷º¯Êý

Àý£º

module(¡°common.js¡±, 
    {
        setup:function(){},
        teardown: function() {} 
    }
);

setup£ºÔÚmodule¿ªÊ¼Ö®Ç°Ö´ÐУ¬¿ÉÒÔΪ¸ÃmoduleÏÂÃæµÄ²âÊÔ´úÂë×öһЩ׼±¸¹¤×÷

teardown£º½«»áÔÚ¸ÃmoduleµÄËùÓвâÊÔ´úÂëÖ´ÐкóÖ´ÐУ¬±ÈÈç×öһЩÇåÀí»¹Ô­¹¤×÷µÈ¡£

QUnit.init( ) ÓÃÓÚ³õʼ»¯QUnit²âÊÔ¿ò¼Ü£¬Í¨³£Õâ¸öº¯ÊýÊDz»ÐèÒªÎÒÃÇÊÖ¹¤µ÷Óõġ£

QUnit.reset( ) ÖØÉ躯Êý£¬Í¨³£ÊÇÔÚÿ¸ötestº¯ÊýÖ´ÐкóÓÉQUnit×Ô¼ºµ÷ÓÃÀ´ÖØÉèÕû¸öQUnit²âÊÔ»·¾³£¬µ±È»±ØÒªÊ±ÎÒÃÇ×Ô¼ºÒ²¿ÉÒÔµ÷ÓÃËüÀ´¸´Ô­£¬²»³£Óá£

Assertions:

ok( state, [message] ) ¶ÏÑÔ¡£stateֵΪtrueʱ±íʾͨ¹ý£¬·ñÔòʧ°Ü¡£

equal( actual, expected, [message] ) ±È½Ï²ÎÊýactualºÍexpectedÊÇ·ñÏàµÈ£¬Ï൱ÓÚ ==

notEqual( actual, expected, [message] ) ±È½ÏÁ½¸ö²ÎÊýÊÇ·ñ²»ÏàµÈ£¬Ï൱ÓÚ !=

deepEqual( actual, expected, [message] ) Ö÷ÒªÓÃÓÚÊý×éºÍ¶ÔÏóµÈÀàÐ͵ÄÖµÊÇ·ñÏàµÈ£¬»áµÝ¹é±éÀúËüÃÇËù°üº¬µÄÖµÊÇ·ñÏàµÈ¡£

notDeepEqual( actual, expected, [message] ) Ö÷ÒªÓÃÓÚÊý×éºÍ¶ÔÏóµÈÀàÐ͵ÄÖµÊÇ·ñ²»ÏàµÈ£¬»áµÝ¹é±éÀúËüÃÇËù°üº¬µÄÖµÊÇ·ñ²»ÏàµÈ¡£

strictEqual( actual, expected, [message] ) ±È½ÏÁ½¸ö²ÎÊýÊÇ·ñÑϸñÏàµÈ£¬Ï൱ÓÚ ===

notStrictEqual( actual, expected, [message] ) ±È½ÏÁ½¸ö²ÎÊýÊÇ·ñ²»ÑϸñÏàµÈ£¬Ï൱ÓÚ !==

throws( block, expected, [message] ) ²âÊÔblockº¯ÊýÊÇ·ñÅ׳öÒ»¸öÒì³££¬Å׳öÔòͨ¹ý£¬²»Å×Ôòʧ°Ü¡£

block£ºÎÒÃÇÒª²âÊԵĺ¯Êý

expected£º¿ÉÑ¡²ÎÊý£¬ÊÇÒ»¸öÀàÐÍ£¬ÓÃÀ´ÑéÖ¤µÚÒ»¸öº¯ÊýÅ׳öµÄÒì³£ÊÇ·ñÊÇÎÒÃÇÔ¤ÆÚµÄÀàÐÍ¡£

Àý£º


function CustomError( message ) {

this.message = message;

}

CustomError.prototype.toString = function() {

return this.message;

};

throws(

function() {

throw new CustomError(¡°some error description¡±);

},

CustomError,

"raised error is an instance of CustomError"

);

  

Asynchronous Testing:

stop( [increment] ) Í£Ö¹²âÊÔµÄÔËÐУ¬ÓÃÓÚÒì²½²âÊÔ¡£ÔÚÒì²½²âÊÔʱһ°ãÏȰÑQUnitµÄtest runnerÍ£ÏÂÀ´¡£

increment£ºÔö¼ÓÍ£Ö¹µÄʱ¼ä¡£

start( [decrement] ) µ±Òì²½µ÷Óóɹ¦ºó¾ÍÓ¦¸Ã°ÑÍ£Ö¹µÄtest runnerÆô¶¯ÆðÀ´ÈÃËü½Ó×ÅÍùǰÅÜ

decrement£ºÓÃÀ´¼õÉÙÍ£Ö¹µÄʱ¼ä¡£

Àý£º

test( "a test", function() {

    stop();

    var result = null;

    $.ajax(

        url,

        {},

        function(data){

            result = data;

        }

    );

    setTimeout(function() {

        equals(result, "success" );

        start();

    }, 150 );

});

 

e) ʹÓÃ

test.html

µ¼Èëqunit.css£¬qunit.js

ÒÀ´Îµ¼Èë±»²âÊÔÎļþsrc.jsºÍ²âÊÔÎļþtest.js

src.jsÀïÊÇÎÒÃÇÒª²âÊÔµÄһЩº¯Êý

test.jsÀï·ÅÎÒÃǵIJâÊÔ

´ò¿ªtest.html£¬ÏÔʾ£º

Èç¹ûÆÚÍûÖµÓ뺯ÊýÖ´ÐеĽá¹û²»Ò»Ö£¬»á±¨´í£º

test.js

test.htmlÏÔʾ£º

ÆÚÍûÖµÓë½á¹û²»·û£¬²âÊÔ²»Í¨¹ý¡£

Óëä¯ÀÀÆ÷×Ô¶¯»¯²âÊÔ¹¤¾ß¼¯³ÉµÄ½Ó¿Ú£º

¶¼ÊÇQUnit×Ô¶¯µ÷ÓõÄһЩº¯Êý£¬Ò»°ã²»Óøģ¬Ò²¿ÉÒÔ×Ô¼º¶¨ÖÆ

QUnit.log(Function({ result, actual, expected, message })) Õâ¸ö½Ó¿Ú»áÔÚÿ¸ö¶ÏÑÔÖ´Ðкó±»×Ô¶¯µ÷ÓÃ

result£º¶ÏÑÔÊÇ·ñͨ¹ý

message£º¶ÏÑÔÀïµÄmessage²ÎÊý

Àý£º

QUnit.log(function(details){

    alert(¡°Log: ¡± + details.result + ¡° ¡± + details.message);

})

QUnit.testStart(Function({ name })) ÔÚÿ¸ö²âÊÔº¯ÊýÖ´ÐÐǰ±»×Ô¶¯µ÷ÓÃ

name£º²âÊÔº¯ÊýÖеÄname²ÎÊýÖµ

QUnit.testDone(Function({ name, failed, passed, total })) ÔÚÿ¸ö²âÊÔº¯Êý½áÊøºóÖ´Ðб»×Ô¶¯µ÷ÓÃ

name£ºÍ¬ÉÏ

failed£ºÖ¸Ê§°Ü¶ÏÑԵĸöÊý

passed£ºÖ¸³É¹¦¶ÏÑԵĸöÊý

total£ºËùÓжÏÑԵĸöÊý

QUnit.moduleStart(Function({ name })) ÔÚÿ¸ömoduleËùÓеIJâÊÔ´úÂëÖ´ÐÐǰ±»×Ô¶¯µ÷ÓÃ

name£ºmoduleº¯ÊýÖÐname²ÎÊýµÄÖµ

QUnit.moduleDone(Function({ name, failed, passed, total })) ÔÚÿ¸ömoduleËùÓеIJâÊÔ´úÂëÖ´ÐÐÍêÖ®ºó±»×Ô¶¯Ö´ÐÐ

failed£ºÖ¸Ê§°Ü¶ÏÑԵĸöÊý

passed£ºÖ¸³É¹¦¶ÏÑԵĸöÊý

total£ºÖ¸ËùÓжÏÑԵĸöÊý

QUnit.begin(Function()) ÔÚËùÓеIJâÊÔ´úÂëµ÷ÓÃ֮ǰÔËÐÐ

QUnit.done(Function({ failed, passed, total, runtime })) ÔÚËùÓеIJâÊÔ´úÂëµ÷ÓÃÖ®ºóÔËÐÐ

failed£ºÖ¸Ê§°Ü¶ÏÑԵĸöÊý

passed£ºÖ¸³É¹¦¶ÏÑԵĸöÊý

total£ºÖ¸ËùÓжÏÑԵĸöÊý

runtime£ºËùÓдúÂëµÄÖ´ÐÐʱ¼ä

Jasmine¿ò¼Ü

a) ¼ò½é

JasmineÊÇÒ»¸öÓÐÃûµÄJavaScriptµ¥Ôª²âÊÔ¿ò¼Ü£¬ËüÊǶÀÁ¢µÄÐÐΪÇý¶¯¿ª·¢¿ò¼Ü£¬Óï·¨ÇåÎúÒ×¶®¡£

ÐÐΪÇý¶¯¿ª·¢(BDD)£ºÊÇÒ»ÖÖÃô½ÝÈí¼þ¿ª·¢µÄ¼¼Êõ£¬Ëü¹ÄÀøÈí¼þÏîÄ¿ÖеĿª·¢Õß¡¢QAºÍ·Ç¼¼ÊõÈËÔ±»òÉÌÒµ²ÎÓëÕßÖ®¼äµÄЭ×÷¡£BDD×î³õÊÇÓÉDan NorthÔÚ2003ÄêÃüÃû£¬Ëü°üÀ¨ÑéÊպͿͻ§²âÊÔÇý¶¯µÈµÄ¼«ÏÞ±à³ÌµÄʵ¼ù£¬×÷Ϊ¶Ô²âÊÔÇý¶¯¿ª·¢µÄ»ØÓ¦¡£ÔÚ¹ýÈ¥µÄÊýÄêÀµÃµ½Á˼«´óµÄ·¢Õ¹¡£

BDDµÄÖØµãÊÇͨ¹ýÓëÀûÒæÏà¹ØÕßµÄÌÖÂÛÈ¡µÃ¶ÔÔ¤ÆÚµÄÈí¼þÐÐΪµÄÇåÐÑÈÏʶ¡£Ëüͨ¹ýÓÃ×ÔÈ»ÓïÑÔÊéд·Ç³ÌÐòÔ±¿É¶ÁµÄ²âÊÔÓÃÀýÀ©Õ¹Á˲âÊÔÇý¶¯¿ª·¢·½·¨¡£ÐÐΪÇý¶¯¿ª·¢ÈËԱʹÓûìºÏÁËÁìÓòÖÐͳһµÄÓïÑÔµÄĸÓïÓïÑÔÀ´ÃèÊöËûÃǵĴúÂëµÄÄ¿µÄ¡£ÕâÈÿª·¢ÕßµÃÒ԰Ѿ«Á¦¼¯ÖÐÔÚ´úÂëÓ¦¸ÃÔõôд£¬¶ø²»ÊǼ¼Êõϸ½ÚÉÏ£¬¶øÇÒÒ²×î´ó³Ì¶ÈµÄ¼õÉÙÁ˽«´úÂë±àдÕߵļ¼ÊõÓïÑÔÓëÉÌÒµ¿Í»§¡¢Óû§¡¢ÀûÒæÏà¹ØÕß¡¢ÏîÄ¿¹ÜÀíÕߵȵÄÁìÓòÓïÑÔÖ®¼äÀ´»Ø·­ÒëµÄ´ú¼Û¡£

BDDµÄ×ö·¨°üÀ¨£º

È·Á¢²»Í¬ÀûÒæÏà¹ØÕßҪʵÏÖµÄÔ¶¾°Ä¿±ê

ʹÓÃÌØÐÔ×¢Èë·½·¨»æÖƳö´ïµ½ÕâЩĿ±êËùÐèÒªµÄÌØÐÔ

ͨ¹ýÓÉÍâ¼°ÄÚµÄÈí¼þ¿ª·¢·½·¨£¬°ÑÉæ¼°µ½µÄÀûÒæÏà¹ØÕßÈÚÈ뵽ʵÏֵĹý³ÌÖÐ

ʹÓÃÀý×ÓÀ´ÃèÊöÓ¦ÓóÌÐòµÄÐÐΪ»ò´úÂëµÄÿ¸öµ¥Ôª

ͨ¹ý×Ô¶¯ÔËÐÐÕâЩÀý×Ó£¬Ìṩ¿ìËÙ·´À¡£¬½øÐлعé²âÊÔ

ʹÓá°Ó¦µ±(should)¡±À´ÃèÊöÈí¼þµÄÐÐΪ£¬ÒÔ°ïÖú²ûÃ÷´úÂëµÄÖ°Ôð£¬ÒÔ¼°»Ø´ð¶Ô¸ÃÈí¼þµÄ¹¦ÄÜÐÔµÄÖÊÒÉ

ʹÓá°È·±£(ensure)¡±À´ÃèÊöÈí¼þµÄÖ°Ôð£¬ÒÔ°Ñ´úÂë±¾ÉíµÄЧÓÃÓëÆäËûµ¥Ôª(element)´úÂë´øÀ´µÄ±ß¼ÊЧÓÃÖÐÇø·Ö³öÀ´¡£

ʹÓÃmock×÷Ϊ»¹Î´±àдµÄÏà¹Ø´úÂëÄ£¿éµÄÌæÉí

BDDÌØÐÔ×¢È룺һ¸ö¹«Ë¾¿ÉÄÜÓжà¸ö»á´øÀ´ÉÌÒµÀûÒæµÄ²»Í¬Ô¸¾°£¬Í¨³£°üÀ¨Ó¯Àû¡¢Ê¡Ç®»ò±£»¤Ç®¡£Ò»µ©Ä³¸öÔ¸¾°±»¿ª·¢Ð¡×éÈ·¶¨Îªµ±Ç°Ìõ¼þϵÄ×î¼ÑÔ¸¾°£¬ËûÃǽ«ÐèÒª¸ü¶àµÄ°ïÖúÀ´³É¹¦ÊµÏÖÕâ¸öÔ¶¾°¡£

È»ºóÈ·¶¨¸ÃÔ¸¾°µÄÖ÷ÒªÀûÒæÏà¹ØÕߣ¬»á´øÈëÆäËûµÄÀûÒæÏà¹ØÕß¡£Ã¿¸öÏà¹ØÕßÒª¶¨ÒåΪÁËʵÏÖ¸ÃÔ¸¾°ËûÃÇÐèÒªÍê³ÉµÄÄ¿±ê¡£ÀýÈ磬·¨Îñ²¿ÃÅ¿ÉÄÜÒªÇóijЩ¼à¹ÜÒªµÃµ½Âú×ã¡£Êг¡ÓªÏú¸ºÔðÈË¿ÉÄÜÒª²Î¼Ó½«Ê¹ÓøÃÈí¼þµÄÓû§µÄÉçÇø¡£°²È«×¨¼ÒÐèҪȷ±£¸ÃÈí¼þ²»»áÊܵ½SQL×¢ÈëµÄ¹¥»÷¡£

ͨ¹ýÕâЩĿ±ê£¬»á¶¨Òå³öҪʵÏÖÕâЩĿ±êËùÐèÒªµÄ´ó¸ÅµÄÌâÄ¿»òÕßÌØÐÔ¼¯ºÏ¡£ÀýÈ磬¡°ÔÊÐíÓû§ÅÅÐò¹±Ï×Öµ¡±»ò¡°½»Ò×É󼯡±¡£´ÓÕâЩÖ÷Ì⣬¿ÉÒÔÈ·¶¨Óû§¹¦ÄÜÒÔ¼°Óû§½çÃæµÄµÚÒ»Åúϸ½Ú¡£

b) Óŵã

ËüÊÇ»ùÓÚÐÐΪÇý¶¯¿ª·¢ÊµÏֵIJâÊÔ¿ò¼Ü£¬ËüµÄÓï·¨·Ç³£Ìù½ü×ÔÈ»ÓïÑÔ£¬¼òµ¥Ã÷ÁË£¬ÈÝÒ×Àí½â¡£

Äܷܺ½±ãµÄºÍAnt¡¢MavenµÈ½øÐм¯³É½øÐÐ×Ô¶¯»¯²âÊÔ£¬Ò²¿ÉÒÔ·½±ãºÍJekinsµÈ³ÖÐø¼¯³É¹¤¾ß½øÐм¯³É£¬¿ÉÒÔÉú³É²âÊÔ½á¹ûµÄXMlÎĵµ¡£

ËüÓзḻµÄAPI£¬Í¬Ê±Óû§Ò²Ö§³ÖÓû§À©Õ¹ËüµÄAPI£¬ÕâÒ»µãºÜÉÙÓÐÆäËü¿ò¼ÜÄܹ»×öµ½¡£

ʹÓ÷½±ã¼òµ¥£¬Ö»ÐèÒªÒýÈëÁ½¸öjsÎļþ¼´¿É

²»½öÖ§³ÖÔÚä¯ÀÀÆ÷ÖвâÊÔ£¬»¹Ö§³ÖÔÚRhinoºÍnode.jsµÈºó¶Ë²âÊÔ¡£

¶ÔÓÚRubyÓïÑÔÓÐÌØ±ðµÄÖ§³Ö£¬Äܹ»·Ç³£·½±ãµÄ¼¯³Éµ½RubyÏîÄ¿ÖÐÈ¥

c) ²»×ã

ÔÚä¯ÀÀÆ÷ÖеIJâÊÔ½çÃæ²»ÈçQUnitÃÀ¹Û¡¢Ïêϸ¡£

d) API

it(string, function) Ò»¸ö²âÊÔSpec

string£º²âÊÔÃû³Æ

function£º²âÊÔº¯Êý

describe (string, function) Ò»¸ö²âÊÔ×鿪ʼÓÚÈ«¾Öº¯Êýdescribe£¬Ò»¸ödescribeÊÇÒ»¸öitµÄ¼¯ºÏ¡£describe°üº¬n¸öit£¬Ò»¸öit°üº¬n¸öÅж϶ÏÑÔ Suite

string£º²âÊÔ×éÃû³Æ

function£º²âÊÔ×麯Êý

describe("²âÊÔadd()º¯Êý", function() {
    it("1 + 1 = 2", function(){
        expect(add(1, 1)).toBe(2);
    });
});

beforeEach(function) ¶¨ÒåÔÚÒ»¸ödescribeµÄËùÓÐitÖ´ÐÐǰ×öµÄ²Ù×÷

afterEach(function) ¶¨ÒåÔÚÒ»¸ödescribeµÄËùÓÐitÖ´Ðкó×öµÄ²Ù×÷

expect(a).matchFunction(b)

expect(a).not.matchFunction(b) ÆÚÍûaºÍbÂú×ãÆ¥Å䷽ʽmatchFunction

matchFunctions£º

toBe Ï൱ÓÚ===£¬´¦Àí¼òµ¥×ÖÃæÖµºÍ±äÁ¿

it("toBeÏ൱ÓÚ===", function(){
    var a = 12;
    var b = a;
    expect(a).toBe(b);
    expect(a).not.toBe(null);
    expect(false == 0).toBe(true);
});
it("toBe²»Äܵ±==ÓÃ", function(){
    expect(false).toBe(0);
});

toEqual ´¦Àí¼òµ¥×ÖÃæÖµºÍ±äÁ¿£¬¶øÇÒ¿ÉÒÔ´¦Àí¶ÔÏó£¬Êý×é

it("toEqual¿ÉÒÔ´¦Àí×ÖÃæÖµ£¬±äÁ¿ºÍ¶ÔÏó", function(){
    var a = 12;
    expect(a).toEqual(12);
    var foo = {key : "key"};
    var bar = {key : "key"};
    expect(foo).toEqual(bar);
    var arr1 = [];
    arr1["p1"] = "string1";
    var arr2 = [];
    arr2["p1"] = "string1";
    var obj = {};
    obj["p1"] = "string1";
    expect(arr1).toEqual(arr2);
    expect(arr1).toEqual(obj);
})

toMatch °´ÕýÔòʽ¼ìË÷¡£

it("toMatchÆ¥ÅäÕýÔòʽ", function(){

    var message = "foo bar baz";

    expect(message).toMatch(/bar/);

    expect(message).toMatch("bar");

    expect(message).not.toMatch(/quux/);
    expect(message).toMatch(/^f/);
    expect(message).not.toMatch(/f$/);
});

toBeDefined ÊÇ·ñÒÑÉùÃ÷ÇÒ¸³Öµ

it("toBeDefined¼ì²â±äÁ¿·Çundefined", function(){

    var a = { key : "key"};

    expect(a.key).toBeDefined();

    expect(a.foo).not.toBeDefined();

    //expect(c).not.toBeDefined();  //δÉùÃ÷³ö´í

    var b;

    expect(b).not.toBeDefined();

});

¶ÔÏó.δÉùÃ÷ÊôÐÔ.not.toBeDefined(); ͨ¹ý

δÉùÃ÷±äÁ¿.not.toBeDefined(); ±¨´í

toBeUndefined ÊÇ·ñundefined

toBeNull ÊÇ·ñnull

toBeTruthy Èç¹ûת»»Îª²¼¶ûÖµ£¬ÊÇ·ñΪtrue

toBeFalsy Èç¹ûת»»Îª²¼¶ûÖµ£¬ÊÇ·ñΪfalse

toContain Êý×éÖÐÊÇ·ñ°üº¬ÔªËØ£¨Öµ£©¡£Ö»ÄÜÓÃÓÚÊý×飬²»ÄÜÓÃÓÚ¶ÔÏó


it("toContain¼ìÑéÊý×éÖÐÊÇ·ñ°üº¬ÔªËØ(Öµ)", function(){

var a = ["foo", "bar", "baz"];

expect(a).toContain("bar");

});

toBeLessThan ÊýÖµ±È½Ï£¬Ð¡ÓÚ

toBeGreaterThan ÊýÖµ±È½Ï£¬´óÓÚ

toBeCloseTo ÊýÖµ±È½Ïʱ¶¨Ò徫¶È£¬ÏÈËÄÉáÎåÈëºóÔٱȽÏ


it("toBeCloseToÊýÖµ±È½Ï£¬Ö¸¶¨¾«¶È£¬ÏÈËÄÉáÎåÈëÔٱȽÏ", function() {

var pi = 3.1415926, e = 2.78;

expect(pi).toBeCloseTo(e, 0);

expect(pi).not.toBeCloseTo(e, 0.1);

});

   
2634 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

΢·þÎñ²âÊÔÖ®µ¥Ôª²âÊÔ
һƪͼÎÄ´øÄãÁ˽â°×ºÐ²âÊÔÓÃÀýÉè¼Æ·½·¨
È«ÃæµÄÖÊÁ¿±£ÕÏÌåϵ֮»Ø¹é²âÊÔ²ßÂÔ
È˹¤ÖÇÄÜ×Ô¶¯»¯²âÊÔ̽Ë÷
Ïà¹ØÎĵµ

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
jenkins³ÖÐø¼¯³É²âÊÔ
ÐÔÄܲâÊÔÕï¶Ï·ÖÎöÓëÓÅ»¯
ÐÔÄܲâÊÔʵÀý
Ïà¹Ø¿Î³Ì

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

LoadRunnerÐÔÄܲâÊÔ»ù´¡
Èí¼þ²âÊÔ½á¹û·ÖÎöºÍÖÊÁ¿±¨¸æ
ÃæÏò¶ÔÏóÈí¼þ²âÊÔ¼¼ÊõÑо¿
Éè¼Æ²âÊÔÓÃÀýµÄËÄÌõÔ­Ôò
¹¦ÄܲâÊÔÖйÊÕÏÄ£Ð͵Ľ¨Á¢
ÐÔÄܲâÊÔ×ÛÊö

ÐÔÄܲâÊÔ·½·¨Óë¼¼Êõ
²âÊÔ¹ý³ÌÓëÍŶӹÜÀí
LoadRunner½øÐÐÐÔÄܲâÊÔ
WEBÓ¦ÓõÄÈí¼þ²âÊÔ
ÊÖ»úÈí¼þ²âÊÔ
°×ºÐ²âÊÔ·½·¨Óë¼¼Êõ

ij²©²ÊÐÐÒµ Êý¾Ý¿â×Ô¶¯»¯²âÊÔ
IT·þÎñÉÌ Web°²È«²âÊÔ
IT·þÎñÉÌ ×Ô¶¯»¯²âÊÔ¿ò¼Ü
º£º½¹É·Ý µ¥Ôª²âÊÔ¡¢Öع¹
²âÊÔÐèÇó·ÖÎöÓë²âÊÔÓÃÀý·ÖÎö
»¥ÁªÍøweb²âÊÔ·½·¨Óëʵ¼ù
»ùÓÚSeleniumµÄWeb×Ô¶¯»¯²âÊÔ