???????
????????д??γ??Project????Nodeд???????????С??????????????????????дNode????????????????????????????????????????????????Node?????????????????δ?г???????????????????д???????????Node???浥??????????????????????Github???棬??????https://github.com/blogdemos/node-test-demo">https://github.com/blogdemos/node-test-demo?????fork~
?????????????
?????????????????壺
??????????????У???????????????????? Unit Testing????????????饗???????С??λ????????????????????????????????????С????????????????????У??????????????????????????????????????????С?????????????????????????????????????????????е??????
????JavaScript?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????GUI?????????????????????鷳??????Node???????????JavaScript????????????????????????????????????
???????????????????????????????????????????????
?????????????????????????????
???????????????????????
?????????????????????????????????????
????????????????????????
???????????????????????????????????????????????????????????????????????????????????????????????????????????????幦???????λ????????????????????????????????????????????????????????Ч????????д?????????????о???????????????????????????????????????????????????????????????????????????????????????????????Github????????star?????repo????????????????????????Щrepo??????????????????????????????????????????????????
???????????????
?????????????????????????????????????BDD??TDD
????TDD
????TDD??????????Test-Driven Development??????????????????????????????????????
???????????д???Щ???????
?????????????????Щ???????????????????????Щ????????????????????????????????????????
???????????????????????????????????
?????????????д??????????????????????????????????????????????
??????????????????????????????????????????
??????????????????

????BDD
????BDD??????????Behavior-Driven Development?????????????????
????BDD??TDD?????????????д????????????????BDD?????????????????????飬????????????????????????????????BDD????????Demo???BDD??????
????????BDD??TDD????????????????£? The Difference Between TDD and BDD
????mocha?????
???????JavaScript???????????ò??????????????TJ Holowaychukд??Mocha???
???????
????Mocha?????????node.js????????????????????Javascript??????????????????????????????????Mocha??????????????????????????????????δ??????????????????????????檔
??????????
npm install -g mocha
$ npm install -g mocha
$ mkdir test
$ $EDITOR test/test.js
var assert = require("assert");
describe('Array'?? function() {
describe('#indexOf()'?? function() {
it('should return -1 when the value is not present'?? function() {
assert.equal(-1?? [1??2??3].indexOf(5));
assert.equal(-1?? [1??2??3].indexOf(0));
});
});
});
$  mocha
.
? 1 test complete (1ms)
????????????
?????????????е?????????????????????????????????????????????
????should.js
????should ????????????????????????????“????”??????BDD?????????????????????????????????????Object??prototype???????????????????????????
????node????????????????飬????should?????е?????????????????????????????????????
???????????????Chai??expectjs??????????
????supertest
????????Node??Web????????????HTTP?????????????????????????????????????????Low???
????supertest?????????????????node?????HTTP???????е????????????dmeo???????????????д??
????var request = require('supertest')
?????? express = require('express');
????var app = express();
????app.get('/user'?? function(req?? res){
????res.send(200?? { name: 'tobi' });
????});
????request(app)
????.get('/user')
????.expect('Content-Type'?? /json/)
????.expect('Content-Length'?? '20')
????.expect(200)
????.end(function(err?? res){
????if (err) throw err;
????});
???????????
?????????????????????????????????????д??????????demo?????demo?????????????-?????????????????
????????????й???Github???棬??????https://github.com/blogdemos/node-test-demo.git
???????
??????????????nodejs??express???д??????????????к????????????demo??е??????????????????е?????????????????????????????
??????????
????.
?????????? controllers                    // ?????
????|   ?????? site.js                    // ?????????
????|   ?????? topic.js                   // ???????
?????????? models                         // ???????
????|   ?????? index.js                   // ???????
????|   ?????? topic.js                   // ???????
????|   ?????? user.js                    // ??????
?????????? proxy                          // ????????
????|   ?????? topic.js                   // ???????????
????|   ?????? user.js                    // ??????????
?????????? tests                          // ???????
????|   ?????? support/support.js         // ???????
????|   ?????? user.test.js               // ????????????
????|   ?????? topic.test.js              // ??????????
?????????? app.js                         // ????????
?????????? consig.js                      // ??????????
?????????? package.json                   // ?????
?????????? router.js                      // ·??????
???????
????1. ???????????
????????????I/O??Node???????????????node????????ó????????????????÷??????д????????????????????????????????????????????????
????????Mocha??????????????????????????????????????????ɡ??????it()???????????????????done????????Mocha??????????????????????????ù??????????
????describe('User'?? function() {
????describe('#save()'?? function() {
????it('should save without error'?? function(done) {
????var user = new User('Luna');
????user.save(done);
????});
????});
????});