TDD初探 + git + NodeJS學習--(FrequencyNumber)


github地址:https://github.com/DaisyCJ/Frequency-Number.git

本次是用TDD(測試驅動開發(fā)Test-Driven Development)方法來實現(xiàn)一個簡單的程序。編程工具是webstorm。nodeJS測試框架是jasmine。git創(chuàng)建代碼庫,保存每一次提交的代碼版本?;玖鞒淌?strong>單元測試實現(xiàn)-->功能代碼實現(xiàn)-->jasmine測試-->git commit提交。

命令行簡單介紹

命令行 或 命令行界面,是一個基于文本的用來查看、 處理、 和操作您的計算機上的文件的應用程序。git和nodeJS都會用的命令行。筆者用的Windows系統(tǒng),使用快捷鍵win+R,再輸入cmd即可。
可通過網(wǎng)站簡單了解:https://tutorial.djangogirls.org/zh/intro_to_command_line/

git基礎

__1. 介紹、安裝、教程 __
安裝包、安裝教程: http://www.runoob.com/git/git-install-setup.html
快速入門:http://codecloud.net/4635.html
這個比較詳細:http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001373962845513aefd77a99f4145f0a2c7a7ca057e7570000

2. 本次練習需要用到的命令(都是很常用,很重要的)
git init------------------------------在當前目錄新建一個Git代碼庫
git add [file1] [file2] ...---------添加指定文件到暫存區(qū)
git add .---------------------------添加當前目錄的所有文件到暫存區(qū)
git commit -m [message]-----提交暫存區(qū)到倉庫區(qū)
git status--------------------------顯示有變更的文件
git log------------------------------顯示當前分支的版本歷史
git checkout [file]----------------恢復暫存區(qū)的指定文件到工作區(qū)
git checkout .---------------------恢復暫存區(qū)的所有文件到工作區(qū)
git reset----------------------------(回退到之前的版本)(用HEAD表示當前版本,HEAD表示上一個版本,HEAD^表示上上個版本)如回退到上一個:git reset --hard HEAD^

3. 深入學習
除了上述的一些簡單的命令之外,git最大的優(yōu)勢在于其分布式,可在github代碼庫創(chuàng)建分支,多人參與編程,并將各種的修改提交到同一個遠程代碼庫。本次練習中只運用到了一些簡單的命令,沒有涉及分布式,可自己嘗試,深入學習。

NodeJS基礎

  1. 介紹、安裝、教程
    入門級新手必看:http://www.runoob.com/nodejs/nodejs-tutorial.html
  2. karme jasmine測試框架安裝
    在命令行輸入:npm install -g jasmine
    在聯(lián)網(wǎng)的情況下,輸入后會自動全局安裝,之后就可以使用jasmine測試框架了。

創(chuàng)建代碼庫,初始化jasmine測試文件

在目標文件所在文件夾,直接點擊右鍵進入git bush,在git init創(chuàng)建代碼庫即可

無標題.png

再告訴git你要使用jamine測試框架,jasmine init初始化。
接著進入webstorm碼代碼就可以啦,需要測試的時候在git里面輸入jasmine就好,你也可以隨時對代碼進行提交。

TDD

TDD是什么?有什么特點?

  • 測試驅動開發(fā)(Test-Driven Development)的英文簡稱,是敏捷開發(fā)中的一項核心實踐和技術,也是一種設計方法論。 TDD的原理是在開發(fā)功能代碼之前,先編寫單元測試用例代碼,測試代碼確定需要編寫什么產(chǎn)品代碼。

簡單點說就是一個先寫測試,再寫實現(xiàn)代碼,用剪單的方式讓測試通過,之后再優(yōu)化代碼。把程序拆分成一個個功能來實現(xiàn)。

編程實現(xiàn)

Frequency Number需求:

  • 我想要一個nodejs小程序,
    它可以幫我處理一段字符串信息,這段字符串信息是由英文單詞組成,每兩個單詞之間有空格,
    處理結果也為一段字符串,這個字符串應該每行只顯示一個單詞和它的數(shù)量,并且按出現(xiàn)頻率倒序排列

example:

  • input:
“it was the age of wisdom it was the age of foolishness it is”
  • output
it 3
was 2
the 2
age 2
of 2 
wisdom 1
foolishness 1
is 1

任務分解
想要實現(xiàn)要求,需對測試字符串進行

  • 拆分
  • 分組
  • 單詞統(tǒng)計
  • 按數(shù)量排序
  • 拼接輸出

具體實現(xiàn)
可從測試空字符開始,為以上要求先寫一個測試,在寫功能代碼,讓測試通過,進而實現(xiàn)全部功能。

代碼

//***test_spec.js***

var main= require('../../shixian.js');

describe("Word Frequency",function(){
    it("return empty string given empty string",function(){
        var result = main('');
        expect(result).toEqual('');
        });
    it("return string given one word",function(){
        var result = main('he');
        expect(result).toEqual('he 1');
       });
    it("return string given two different words",function(){
            var result = main('he is');
            expect(result).toEqual('he 1\r\nis 1');
       });
    it("return string given duplicated words",function(){
            var result = main('he he is');
            expect(result).toEqual('he 2\r\nis 1');
       });
    it("return string given words splited by multiple space",function(){
            var result = main('he    is');
            expect(result).toEqual('he 1\r\nis 1')
       });
    it("a test",function(){
        var result = main('it was the age of wisdom it was the age of foolishness it is');
        expect(result).toEqual('it 3\r\nwas 2\r\nthe 2\r\nage 2\r\nof 2\r\nwisdom 1\r\nfoolishness 1\r\nis 1')
    });
//***shixian.js***
var formatWordAndCount = function (words, count){
    return words + ' ' + count;
}

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 split = function (words){
    return words.split(/\s+/);
}

var sort = function (groupWords) {
    groupWords .sort((x, y) => y.count - x.count);
}

var format = function (groupWords) {
    return groupWords.map((e) => formatWordAndCount(e.word, e.count)).join('\r\n');
}
function main(words){
    if(words !== ''){
          let wordArray = split(words);
          let  groupWords = group(wordArray);
          sort(groupWords);
          return format(groupWords);
    }
    return '';
}
module.exports = main;

文件目錄:


文件目錄

git log 記錄

git log 記錄

總結

本次練習涉及很多以前沒有接觸過的新技術、新概念,導致開始不知道從哪里下手,花了很長時間配置安裝。如何在信息泛濫的互聯(lián)網(wǎng)搜索自己想要的信息,而不被一個又一個新概念牽著走,也是一個很重要的技能。從最簡單的開始,安裝、配置、HelloWorld、基本語法、跟著實現(xiàn)一個小程序,慢慢來,給自己逐漸增加信心想繼續(xù)學下去。另外,當一個問題在網(wǎng)上找不到滿意的資料,得不到解決,還是要厚著臉皮請教一些大神呀。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,612評論 19 139
  • Git是目前最流行的版本管理系統(tǒng),也是最先進的分布式版本控制系統(tǒng)(distributed version cont...
    pro648閱讀 5,982評論 1 17
  • 無話可說 比爭吵更折磨 不如就分手 放我一個人生活 請你雙手不要再緊握 一個人我至少干凈俐落 淪...
    一個人干凈利落_閱讀 1,622評論 0 0
  • 不是我們對分別麻木了,更不是我們習慣了分別,而是我們逐漸學會了偽裝自己的感覺了。我們并不是你看上去的那樣開心,只是...
    修進閱讀 205評論 0 0
  • 作為一個特別愛聽 #南山南# 這種類型歌曲,并且愛裝深沉的姑娘來說,關于旅行的事情。我喜歡吐槽。 昨天和一個灰常志...
    陳小鳥閱讀 268評論 0 1

友情鏈接更多精彩內容