????1.?????????????
???????????????????????????????????????????????е?
?????????????????????????????console?????????????????????????????????飬?′β????????????????Ч?????????????????д????????????????????α?д?????????
????????????????????????????????????????????????????л??漰????????ЩAPI??????????????????????ЩAPI?????????????????????????????????????????????
????????????????????????????????????????????????????????????????????????????????API??????TDD???????????????????????
?????????????????????????????????????????????????????????????????????????????????????в??????????????????????????
????2.????????????????
????2.1??????
?????????????????????QUnit??jasmine??mocha??jest??intern???????Щ????????????????£???????????????о???
????Qunit:???????????????jquery???????????????????????????????jquery????????????????????????jquery?????
????jasmine:Behavior-Drive development(BDD)????????????????????У????????棬???asssert??mock????
????mocha:node????????tj?????????????node??browser?????????к???????????????????????????????????????report
????intern:?????????ò?????????????棬????????????????????????й???
????2.2?????
????chai??????????????е???????????TDD(assert)??BDD(expect??should)????????????
????var chai=require('chai');
????var assert=chai.assert;//typef assert==='object'
????chai.should();//??Obejct.prototype???????
????should.js:TJ????????????????
????expect.js:BDD????????????????????should.js????mini???BDD??
????assert(node??????????):??????node????????????
????2.3 mock??
????????????????mock?????????????????????????飬????Щ?????????????Щ??????粻???????????????????Σ????????????????????????飬???????????????????mock?????α??????????顣?????????XMLHttpRequest?????????http statusCode?404????????????????????????????????mock?????????
????sinon.js:???????mock????????spies??stub??fake XMLHttpRequest??Fake server??Fake time???????????????????????
????2.4 test runner
????karma:???ò???????????????????????????????????????????????????в????
????3.??????????????????
????????????ж????????????????????console???????text???
???????????actual???expect???????????????????????????????????????Щ?????????????????????????????????????????????????????
????mock??????????????μ??????????????????????????????????????o?????????Щ??????????????called??calledWithArguments?????
????function describe(text??fn){
????try{
????fn.apply(...);
????}catch(e){
????assert(text)
????}
????}
????function fn(){
????while(...){
????beforeEach();
????it(text??function(){
????assert();
????});
????afterEach();
????}
????}
????function it(text??fn){
????...
????fn(text)
????...
????}
????function assert(expect??actual){
????if(expect not equla actual){
????throw new Error(text);
????}
????}
????function fn(){
????...
????}
????function spy(cb){
????var proxy=function(){
????...
????}
????proxy.called=false;
????proxy.returnValue='...';
????...
????return proxy;
????}
????var proxy=spy(fn);//??????mock????
????4.???д???????????
????4.1???
???????????????????????????????????
??????????????????????????????
?????????????????????
???????????????????????????
????????AOP(beforeEach??afterEach)?????????????????????????ù???
?????????????????????????????????????
????4.2 TDD
??????仰???????????д???????д????????TDD??????????????????????????????????????????????????????????????????????嶨?????????;
????????????TDD???????????????????????????????????????????????????£??????????????TDD???????????????????????д?????????????????????????????????????????????к?????????????????????????д?????????????????????TDD????????????á?
????4.3 BDD
?????????????????????????????????????????????????????QA?????????????Э????BDD???????????????????????????(????GUI)?????ó?????????.