ǰÑÔ
ÔÚJavaÁìÓò£¬Apache, Spring, JBoss Èý´óÉçÇøµÄ¿ªÔ´¿â£¬°üÂÞÍòÏ󣬵«Ã¿¸ö¿â¶¼ÔÚÆäÁìÓòÖж¼º×Á¢¼¦Èº¡£¶øNodejsÖи÷ÖÖ¸÷ÑùµÄ¿ªÔ´¿â£¬È´ÈÃÈËÑÛ»¨çÔÂÒ£¬²»Öª´ÓºÎÏÂÊÖ¡£
NodejsÁìÓò: Jasmine×öµ¥Ôª²âÊÔ£¬Karma×Ô¶¯»¯Íê³Éµ¥Ôª²âÊÔ£¬GruntÆô¶¯KarmaͳһÏîÄ¿¹ÜÀí£¬Yeoman×îºó·â×°³ÉÒ»¸öÏîÄ¿ÔÐÍÄ£°å£¬npm×önodejsµÄ°üÒÀÀµ¹ÜÀí£¬bower×öjavascriptµÄ°üÒÀÀµ¹ÜÀí¡£JavaÁìÓò£ºJUnit×öµ¥Ôª²âÊÔ,
Maven×Ô¶¯»¯µ¥Ôª²âÊÔ£¬Í³Ò»ÏîÄ¿¹ÜÀí£¬¹¹½¨ÏîÄ¿ÔÐÍÄ£°å£¬°üÒÀÀµ¹ÜÀí¡£
NodejsÈÃ×éºÏ±äµÃ¸ü·á¸»£¬È´ÓÖÔÚ¼ÓÖØÎÒÃǵÄѧϰÃż÷¡£ÎÒ»¹Ëµ²»Çå³þ£¬Ò²¿´²»Í¸£¡
ÉÏÃæÐ´µÄÓеãÔ¶ÁË£¬»Øµ½ÎÄÕµÄÖ÷Ì⣬Jasmine+Karma×Ô¶¯»¯µ¥Ôª²âÊÔ¡£
1. KarmaµÄ½éÉÜ
KarmaÊÇTestacularµÄÐÂÃû×Ö£¬ÔÚ2012Äêgoogle¿ªÔ´ÁËTestacular£¬2013ÄêTestacular¸ÄÃûΪKarma¡£KarmaÊÇÒ»¸öÈÃÈ˸е½·Ç³£ÉñÃØµÄÃû×Ö£¬±íʾ·ð½ÌÖеÄÔµ·Ö£¬Òò¹û±¨Ó¦£¬±ÈCassandraÕâÖÖÃû×Ö¸üÈÃÈ˲²»Í¸£¡
KarmaÊÇÒ»¸ö»ùÓÚNode.jsµÄJavaScript²âÊÔÖ´Ðйý³Ì¹ÜÀí¹¤¾ß£¨Test
Runner£©¡£¸Ã¹¤¾ß¿ÉÓÃÓÚ²âÊÔËùÓÐÖ÷Á÷Webä¯ÀÀÆ÷£¬Ò²¿É¼¯³Éµ½CI£¨Continuous integration£©¹¤¾ß£¬Ò²¿ÉºÍÆäËû´úÂë±à¼Æ÷Ò»ÆðʹÓá£Õâ¸ö²âÊÔ¹¤¾ßµÄÒ»¸öÇ¿´óÌØÐÔ¾ÍÊÇ£¬Ëü¿ÉÒÔ¼à¿Ø(Watch)ÎļþµÄ±ä»¯£¬È»ºó×ÔÐÐÖ´ÐУ¬Í¨¹ýconsole.logÏÔʾ²âÊÔ½á¹û¡£
JasmineÊǵ¥Ôª²âÊÔ¿ò¼Ü£¬±¾µ¥½«½éÉÜÓÃKarmaÈÃJasmine²âÊÔ×Ô¶¯»¯Íê³É¡£JasmineµÄ½éÉÜ£¬Çë²Î¿¼ÎÄÕ£ºjasmineÐÐΪÇý¶¯,²âÊÔÏÈÐÐ
istanbulÊÇÒ»¸öµ¥Ôª²âÊÔ´úÂ븲¸ÇÂʼì²é¹¤¾ß£¬¿ÉÒÔºÜÖ±¹ÛµØ¸æËßÎÒÃÇ£¬µ¥Ôª²âÊÔ¶Ô´úÂëµÄ¿ØÖƳ̶ȡ£
2. KarmaµÄ°²×°
ϵͳ»·¾³:
win7 64bit, node v0.10.5, npm 1.2.19 |
°²×°Karma
~ D:\workspace\javascript>mkdir karma ~ D:\workspace\javascript>cd karma ~ D:\workspace\javascript\karma>npm install -g karma # ²âÊÔÊÇ·ñ°²×°³É¹¦ ~ D:\workspace\javascript\karma>karma start INFO [karma]: Karma v0.10.2 server started at http://localhost:9876/ INFO [Chrome 28.0.1500 (Windows 7)]: Connected on socket nIlM1yUy6ELMp5ZTN9Ek |
´Óä¯ÀÀÆ÷¿´µ½karam½çÃæ¡£

ÏÂÃæÎÒÃÇÒª¿ªÊ¼ÅäÖÃkaram¡£
3. Karma + JasmineÅäÖÃ
³õʼ»¯karmaÅäÖÃÎļþkarma.conf.js
~ D:\workspace\javascript\karma>karma init Which testing framework do you want to use ? Press tab to list possible options. Enter to move to the next question. > jasmine Do you want to use Require.js ? This will add Require.js plugin. Press tab to list possible options. Enter to move to the next question. > no Do you want to capture a browser automatically ? Press tab to list possible options. Enter empty string to move to the next question. > Chrome > What is the location of your source and test files ? You can use glob patterns, eg. "js/*.js" or "test/**/*Spec.js". Enter empty string to move to the next question. > Should any of the files included by the previous patterns be excluded ? You can use glob patterns, eg. "**/*.swp". Enter empty string to move to the next question. > Do you want Karma to watch all the files and run the tests on change ? Press tab to list possible options. > yes Config file generated at "D:\workspace\javascript\karma\karma.conf.js". |
°²×°¼¯³É°ükarma-jasmine
~ D:\workspace\javascript\karma>npm install karma-jasmine |
4. ×Ô¶¯»¯µ¥Ôª²âÊÔ
3²½×¼±¸¹¤×÷£º
1. ´´½¨Ô´Îļþ£ºÓÃÓÚʵÏÖijÖÖÒµÎñÂß¼µÄÎļþ£¬¾ÍÊÇÎÒÃÇÆ½Ê±Ð´µÄjs½Å±¾
2. ´´½¨²âÊÔÎļþ£º·ûºÏjasmineAPIµÄ²âÊÔjs½Å±¾
3. ÐÞ¸Äkarma.conf.jsÅäÖÃÎļþ
1). ´´½¨Ô´Îļþ£ºÓÃÓÚʵÏÖijÖÖÒµÎñÂß¼µÄÎļþ£¬¾ÍÊÇÎÒÃÇÆ½Ê±Ð´µÄjs½Å±¾
ÓÐÒ»¸öÐèÇó£¬ÒªÊµÏÖµ¥´Êµ¹Ð´µÄ¹¦ÄÜ¡£È磺¡±ABCD¡± ==> ¡°DCBA¡±
~ vi src.js function reverse(name){ return name.split("").reverse().join(""); } |
2). ´´½¨²âÊÔÎļþ£º·ûºÏjasmineAPIµÄ²âÊÔjs½Å±¾
describe("A suite of basic functions", function() { it("reverse word",function(){ expect("DCBA").toEqual(reverse("ABCD")); }); }); |
3). ÐÞ¸Äkarma.conf.jsÅäÖÃÎļþ
ÎÒÃÇÕâÀïÐèÒªÐ޸ģºfilesºÍexclude±äÁ¿
module.exports = function (config) { config.set({ basePath: '', frameworks: ['jasmine'], files: ['*.js'], exclude: ['karma.conf.js'], reporters: ['progress'], port: 9876, colors: true, logLevel: config.LOG_INFO, autoWatch: true, browsers: ['Chrome'], captureTimeout: 60000, singleRun: false }); }; |
Æô¶¯karma
µ¥Ôª²âÊÔÈ«×Ô¶¯Ö´ÐÐ
~ D:\workspace\javascript\karma>karma start karma.conf.js INFO [karma]: Karma v0.10.2 server started at http://localhost:9876/ INFO [launcher]: Starting browser Chrome WARN [launcher]: The path should not be quoted. Normalized the path to C:\Program Files (x86)\Google\Chrome\Application\chrome.exe INFO [Chrome 28.0.1500 (Windows 7)]: Connected on socket bVGffDWpc1c7QNdYye_6 INFO [Chrome 28.0.1500 (Windows 7)]: Connected on socket DtTdVbd4ZsgnMQrgye_7 Chrome 28.0.1500 (Windows 7): Executed 1 of 1 SUCCESS (3.473 secs / 0.431 secs) Chrome 28.0.1500 (Windows 7): Executed 1 of 1 SUCCESS (0.068 secs / 0.021 secs) TOTAL: 2 SUCCESS |
ä¯ÀÀÆ÷»á×Ô¶¯´ò¿ª

ÎÒÃÇÐÞ¸Ätest.js
~ vi test.js
describe("A suite of basic functions", function() { it("reverse word",function(){ expect("DCBA").toEqual(reverse("ABCD")); expect("Conan").toEqual(reverse("nano")); }); }); |
ÓÉÓÚkarma.conf.jsÅäÖÃÎļþÖÐautoWatch: true, ËùÒÔtest.jsÎļþ±£´æºó£¬»á×Ô¶¯Ö´Ðе¥Ôª²âÊÔ¡£
Ö´ÐÐÈÕÖ¾ÈçÏ£ºÌáʾÎÒÃǵ¥Ôª²âÊÔ³ö´íÁË¡£
INFO [watcher]: Changed file "D:/workspace/javascript/karma/test.js". Chrome 28.0.1500 (Windows 7) A suite of basic functions reverse word FAILED Expected 'Conan' to equal 'onan'. Error: Expected 'Conan' to equal 'onan'. at null. (D:/workspace/javascript/karma/test.js:4:25) Chrome 28.0.1500 (Windows 7): Executed 1 of 1 (1 FAILED) ERROR (0.3 secs / 0.006 secs) |
5. KarmaºÍistanbul´úÂ븲¸ÇÂÊ
Ôö¼Ó´úÂ븲¸ÇÂʼì²éºÍ±¨¸æ£¬Ôö¼ÓistanbulÒÀÀµ
~ D:\workspace\javascript\karma>npm install karma-coverage |
ÐÞ¸Äkarma.conf.jsÅäÖÃÎļþ
~ vi karma.conf.js reporters: ['progress','coverage'], preprocessors : {'src.js': 'coverage'}, coverageReporter: { type : 'html', dir : 'coverage/' } |
Æô¶¯karma start£¬ÔÚ¹¤³ÌĿ¼ÏÂÃæÕÒµ½index.htmlÎļþ£¬coverage/chrome/index.html
´ò¿ªºó£¬ÎÒÃÇ¿´µ½´úÂë²âÊÔ¸²¸ÇÂ̱¨¸æ

¸²¸ÇÂÊÊÇ100%£¬ËµÃ÷ÎÒÃÇÍêÕûÁ˲âÊÔÁËsrc.jsµÄ¹¦ÄÜ¡£
½ÓÏÂÀ´£¬ÎÒÃÇÐÞ¸Äsrc.js£¬Ôö¼ÓÒ»¸öif·ÖÖ§
function reverse(name){ if(name=='AAA') return "BBB"; return name.split("").reverse().join(""); } |
ÔÙ¿´¸²¸ÇÂʱ¨¸æ£¬

Statements£º75%¸²¸Ç£¬Branches£º50%¸²¸Ç¡£
ΪÁ˲úÆ·µÄÖÊÁ¿ÎÒÃÇÒª¾¡Á¿´ïµ½¸ü¶àµÄ¸²¸ÇÂÊ£¬Ò»°ã¶ÔÓÚJAVAÏîÄ¿À´Ëµ£¬ÄÜ´ïµ½80%¾ÍÊÇÏ൱¸ßµÄ±ê×¼ÁË¡£¶ÔÓÚJavascriptµÄ´úÂë²âÊÔ¼°¸²¸ÇÂÊÑо¿£¬ÎÒ»¹Òª×ö¸ü¶àµÄÑéÖ¤¡£
6. KarmaµÚÒ»´ÎÆô¶¯Ê±³öÏÖµÄÎÊÌâ
CHROME_BINµÄ»·¾³±äÁ¿ÎÊÌâ
~ D:\workspace\javascript\karma>karma start karma.conf.js INFO [karma]: Karma v0.10.2 server started at http://localhost:9876/ INFO [launcher]: Starting browser Chrome ERROR [launcher]: Cannot start Chrome Can not find the binary C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe Please set env variable CHROME_BIN |
ÉèÖ÷½·¨£ºÕÒµ½ÏµÍ³ÖÐchromeµÄ°²×°Î»Öã¬ÕÒµ½chrome.exeÎļþ
~ D:\workspace\javascript\karma>set
CHROME_BIN="C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" |
|