一、知識鋪墊
1.TDD
-
簡介:
TDD是測試驅動開發(Test-Driven Development)的英文簡稱,是敏捷開發中的一項核心實踐和技術,也是一種設計方法論。 -
原理:
在開發功能代碼之前,先編寫單元測試用例代碼,測試代碼確定需要編寫什么產品代碼。 -
基本思路:
通過測試來推動整個開發的進行,但測試驅動開發并不只是單純的測試工作,而是把需求分析,設計,質量控制量化的過程。
步驟:
2.Git
這部分內容我很久之前單獨簡單寫了一下。
可以看http://www.lxweimin.com/p/00641507c1d2
3.Node.js
Node.js是一個Javascript運行環境(runtime)。實際上它是對Google V8引擎進行了封裝。V8引 擎執行Javascript的速度非常快,性能非常好。Node.js對一些特殊用例進行了優化,提供了替代的API,使得V8在非瀏覽器環境下運行得更好。
PS:這是百度出來的解釋,個人理解就是說是個很好的運行環境,用來做前端開發的東東,但是感覺還是很抽象,可能跟知識存儲太少有關,所以這部分就稍微提一下。
npm:
NPM是隨同NodeJS一起安裝的包管理工具,能解決NodeJS代碼部署上的很多問題,常見的使用場景有以下幾種:
- 允許用戶從NPM服務器下載別人編寫的第三方包到本地使用。
- 允許用戶從NPM服務器下載并安裝別人編寫的命令行程序到本地使用。
- 允許用戶將自己編寫的包或命令行程序上傳到NPM服務器供別人使用。
PS:這部分還是比較抽象,我是按照別人的步驟一步一步安裝的
詳見:
http://www.runoob.com/nodejs/nodejs-npm.html
4.Jasmine
Jasmine 是一個簡易的JS單元測試框架。Jasmine 不依賴于任何瀏覽器、DOM、或者是任何 JavaScript 而存在。它適用于所有網站、Node.js 項目,或者是任何能夠在 JavaScript 上面運行的程序。
使用jasmine測試Node項目的教程:
http://www.cnblogs.com/zhaoxiaoji/p/jasmine-node.html
這里有個單獨的可以直接測試的框架 :Jasmine-standalone-2.5.2,是一個文件夾形式,打開后的文件目錄是:
- /lib 文件夾下包含了測試框架的源碼等文件。
- /src 下包含了待測試的 JS 代碼。里面包含兩個文件 Song.js 和 Player.js
- /spec 下則包含了對應的測試代碼,PlayerSpec.js 和 SpecHelper.js
詳細介紹:
http://www.cnblogs.com/zhaoxiaoji/p/jasmine_intro.html
http://www.cnblogs.com/zhaoxiaoji/p/jasmine-node.html
二、FrequencyNumber
1、要求:
它可以幫我處理一段字符串信息,這段字符串信息是由英文單詞組成,每兩個單詞之間有空格,處理結果也為一段字符串,這個字符串應該每行只顯示一個單詞和它的數量,并且按出現頻率倒序排列
2、 大致步驟
1、安裝nodejs (我安裝的Nodejs時,npm就一起安裝了)
用這個安裝程序按步驟安裝就好了
然后得到一個文件夾
2、使用npm全局安裝Jasmine Module
在cmd命令框中輸入
npm install -g jasmine
3、初始化框架(這是我自己理解的意思)
新建一個文件夾,在當前文件夾下依次輸入命令:
npm init (這時文件夾中會出現一個package.json)
npm install express (這時文件夾中會出現一個node-modules文件夾)
jasmine init (這時文件夾中會出現一個spec文件夾)
jasmine examples(這時會出現一個lib)
完成后的文件夾:
- Player.js 用于編寫核心代碼
- PlayerSpec.js用于編寫是針對與Player.js編寫的測試用例
- 由于對javascript語言不熟悉,所以代碼多數借鑒于他人。
4、編寫代碼
由于對javascript語言不熟悉,所以代碼多數借鑒于他人。
main.js:
```javascript`
main.js(=Player.js)
function main(words) {
if(words!=='')
{
let wordArray=words.split(/\s+/)
let groupWords=group(wordArray)
sort (groupWords);
return groupWords.map((e)=>format(e.word,e.count)).join('\r\n')
}
return ''
}
var group=function(wordArray)
{
return wordArray.reduce((array,word)=>
{
let entry=array.find((e)=>e.word===word);
if(entry)
{
entry.count++
}
else
{
array.push({word:word,count:1})
}
return array
},[])
}
var sort =function(groupWords){
groupWords.sort((x,y)=>y.count-x.count)
};
var format=function(word,count)
{
return word+' '+count
}
module.exports = main
***
**PlayerSpec.js:**
```javascript
describe("Word Frequency", function() {
var main = require('../../lib/jasmine_examples/main.js')
it('returns empty string given empty string',function(){
var result=main('')
var expect_string=''
expect(expect_string).toEqual(result)
})
it('returns string given one word',function()
{
var result=main('it')
expect(result).toEqual('it 1')
})
it('returns string given two different words',function()
{
var result=main('it was')
expect(result).toEqual('it 1\r\nwas 1')
})
it('returns string given duplicated different words',function()
{
var result=main('it it was')
expect(result).toEqual('it 2\r\nwas 1')
})
it('returns string given duplicated different words need to be sorted',function()
{
var result=main('it was was')
expect(result).toEqual('was 2\r\nit 1')
})
it('returns string given words splited by multiple spaces',function()
{
var result=main('it was')
expect(result).toEqual('it 1\r\nwas 1')
})
it('returns string given full words ',function()
{
var result=main('it was the age of wisdom it was the age of foolishness it')
expect(result).toEqual('it 3\r\nwas 2\r\nthe 2\r\nage 2\r\nof 2\r\nwisdom 1\r\nfoolishness 1')
})
})
測試結果
5、使用Git提交
依次使用 :
- git add -A
- git commit
- git push (提交到GitHub上)
用git log看一個提交記錄:
GitHub地址
https://github.com/XiangYanFei/TDD-exercise
三、心得體會(雜談)
四月份的時候其實就花了好多時間去看npm nodejs jasmine...這些,但進展不多,后來慢慢就沒有理會這個作業,直到前天5.17到實驗室教練說兩天后必須交,然后在之前的基礎上又花了不少的時間去弄懂這些的聯系,終于我大概理解了他們之間的關系==。這段時間對于我來說真的很忙,于是教練讓我列了一個時間表來看自己近三天的時間是怎么安排的,列完后我發現其實中間還是有時間可以擠出來,同時也讓自己意識到了時間管理的重要性,要想高效率的完成一件事,就要合理分配時間,并且在這段時間中專注力只在眼前的事上。
在學習npm nodejs jasmine這些的初期,我真的是很懵逼,只有靠百度,但是百度出來的東西是零零散散的,而且里面很多語言是我現階段看不懂的(就又得百度),教練讓我們用思維導圖的模式去學習,我覺得這個再理清思路上是有用的。后面就慢慢看這些的教程,別人寫的博啊,也就慢慢領會到,由于現在自己的知識儲備不夠,理解一些東西還是有一定難度,也只能明白個大概。
通過這次學習我覺得更重要的是對自己學習能力的一個提升吧,以前的大部分問題一百度就能直接出來結果,這次就相當于“拼圖”,得到的都是一小塊一小塊,得自己去找聯系,然后再拼起來。
其實還有其他的感悟,就先說這么多了 bye~