一 作业要求
QQ截图20170519162906.jpg补充要求:
QQ截图20170519171754.jpg将最终代码推送到github远程仓库,链接写到文章里。
作业分解
看到要求我们很多小伙伴就开始方了,先不要说这个程序该如何实现。 看到这几个陌生的名字,咦,git是啥?Nodejs又是啥?TDD?远程仓库????此时,心中有一万只那个什么在飞过。
不积跬步,无以至千里,不积小流,无以成江海。别急,我们一步一步地来!!!
下面我们来一个问题一个问题地解决。
一.Git
- 这是什么?
Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
懂得人一看就懂,不懂的人继续不懂。不过没关系,有时候有些工具我们会用后才会慢慢懂它。姑且理解这是一种傻瓜跟踪器吧。怎么跟踪?跟踪什么?我们以后遇到再说。 - 下载安装
安装教程:(http://www.runoob.com/git/git-install-setup.html)
入门教程:(http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/)
git的下载安装和简单使用跟着教程就是啦。比如我们在本地创建一个名叫xiaosb的版本库,具体操作如下(当前为windows系统):
1 打开你的git——
2 到D盘去安装
QQ截图20170519175247.jpg
3 用mkdir +文件名字(请不要用中文)创建你的版本库名字,比如我的文件名:xiaosb
QQ截图20170519175345.jpg
4.去你的D盘目录就会出现你加的文件啦
QQ截图20170519175436.jpg5 到你的文件去,然后git init后就简单创建好啦,其他的常用命令跟着教程学吧!
二.Nodejs和npm
- Nodejs和npm到底是什么?
Node.js是一个Javascript运行环境(runtime)。实际上它是对Google V8引擎进行了封装。V8引 擎执行Javascript的速度非常快,性能非常好。Node.js对一些特殊用例进行了优化,提供了替代的API,使得V8在非浏览器环境下运行得更好。 Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。
npm是随同NodeJS一起安装的包管理工具,能解决NodeJS代码部署上的很多问题。
看不懂吧,那就不要管它!!!我们先学会用。
- Nodejs安装及入门:http://www.runoob.com/nodejs/nodejs-tutorial.html
可以直接在官网里下载相应的版本。 - jasmine——js的测试工具
- 用npm 安装jasmine在node.js commond prompt窗口或者powershell窗口输入
npm install -g jasmine
安装后界面没有出现Error等字样,就是成功了。
三 TDD编程实现FrequenNumber
- TDD
-
把jasmian和webstrom结合起来
1.用git在e盘建一个文件并使用jasmian(仅供演示,之前的已经安好)
产生的结果
QQ截图20170519210019.jpg
再在窗口输入命令
jasmine examples
得到
QQ截图20170519222534.jpg输入
QQ截图20170519222641.jpgjasmine 测试
测试通过,接下来我们修改框架,来写自己的代码
TDD 分解
任务分解图.jpg测试一
QQ截图20170519233406.jpg QQ截图20170519233416.jpg- 代码-主要是学习老师的
describe("Frequency Number",function(){
var main=require('../helpers/main');
it("returns empty string given empty string",function(){
var result =main('');
expect(result).toEqual('');
});
it("returns string given one word",function(){
var result =main('he');
expect(result).toEqual('he 1');
});
it("returns string given two different words",function(){
var result =main('he is');
expect(result).toEqual('he 1\r\nis 1');
});
it("returns string given duplicated words",function(){
var result =main('he is he');
expect(result).toEqual('he 2\r\nis 1');
});
it("returns string given duplicated words need to be sorted",function(){
var result =main('he is is');
expect(result).toEqual('is 2\r\nhe 1');
});
it("returns string given words splited by multiple spaces",function(){
var result =main('he is');
expect(result).toEqual('he 1\r\nis 1');
});
})
var format = function(word,count){
return word + ' '+ 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;
},[]);
};
function main (words) {
if(words !== ''){
let wordArray = words.split(/\s+/);
let groupedWords = group(wordArray);
groupedWords.sort((x, y)=> y.count - x.count);
return groupedWords.map((e)=>format(e.word, e.count)).join('\r\n');
}
return ''
}
module.exports=main;
网友评论