最近学了一段时间的TDD,从最开始的摸不着头脑,到现在的略懂,有一些学习的TDD心得,跟大家分享一下,希望对初学TDD的你有所帮助。
1.什么是TDD:TDD测试驱动开发(Test-driven development)是极限编程中倡导的程序开发方法,以其倡导
先写测试程序,然后编码实现其功能得名。测试驱动开发始于20世纪90年代。测试驱动开发。测试驱动开发的目的是取得快速反馈并使用“illustrate the main line”方法来构建程序。
测试驱动开发是戴两顶帽子思考的开发方式:先戴上实现功能的帽子,在测试的辅助下,快速实现其功能;再戴上重构的帽子,在测试的保护下,通过去除冗余的代码,提高代码质量。测试驱动着整个开发过程:
首先,驱动代码的设计和功能的实现;其后,驱动代码的再设计和重构。 --摘自维基百科
说通俗点就是:先测试-再实现功能-最后重构。
2.TDD的流程是什么?举个例子:顾客要定制一个1m长,0.8m宽,0.5m高的蓝色玻璃水缸,商家做好后就交给顾客验收,验收不合格就需要改装,直到验收通过。测试也是一个道理,顾客需求就是测试文件,制作过程就相当于写功能实现代码。功能代码写好后就按照测试文件(顾客需求)进行测试,测试不通过就修改功能实现代码(改装),直至测试通过(验收)就可以啦!
3.jasmine:javascript的测试框架有很多种,我用的是jasmine,下载地址是:
https://github.com/pivotal/jasmine/archive/master.zip。参考jasmine的官方文档:
http://jasmine.github.io/edge/introduction.html。
jasmine下载后解压某个版本(2.0.1),打开工程,再打开dist/jasmine-standalone-2.0.1/spec,spec就是测试的代码文件,同目录下src文件夹下的js文件就是功能实现的代码文件。怎么知道测试有没有通过呢?用浏览器打开src下的SpecRunner文件(鼠标移动至页面又上方,会自动显示浏览器图标),就会在浏览器上显示测试的结果,如:3 specs, 0 failures。当然,首先需要在SpecRunner.html上添加你新建的js文件路径。
4.jasmine语法的简单介绍:打开spec/PlaySpec.js文件,可以看到一个关于播放器的测试,浏览一下整个文件,你可能会注意到,整个JS文件都是由
describe() beforeEach() it() 和
expect() 联系起来的。这几个方法就是测试最重要的部分。我截取一部分讲一下测试的基本语法:
describe("Player", function() {
var player;
var song;
beforeEach(function() {
player = new Player();
song = new Song();
});
it("should be able to play a Song", function() {
player.play(song);
expect(player.currentlyPlayingSong).toEqual(song);
//demonstrates use of custom matcher
expect(player).toBePlaying(song);
});
describe()和it()是什么:顾客验收的时候,要测水缸(water_jar)的大小是否符合要求,就需要分别测量水缸的长宽高。所以对应的,it()就是每个具体的小测试,比如测量水缸的长/宽/高,describe()是一个或多个it()的集合,如水缸的大小,就需要三个it()。describe()也可以相互嵌套。describe和it都接收两个参数,第一个参数是描述语句,表明测试的是什么内容。第二个参数是function(),就是具体测试怎么实现。
怎么知道测量结果符不符合要求呢?就拿测量结果与预期值进行比较,也就是expect()方法。expect()接受两个参数,第一个参数是实际的测量值,第二个参数是你的预期值。如果两者相等的话,测试就会通过(green),否则就是(red)。除了
.toEqual()外,还有 .toBe(), .toMatch(), .toBeDefined() 可以根据需要选择。比如刚才的水缸测试,我要测试水缸的大小,那么大概的框架就是:
describe("water_jar size",function(){
it("should be 1m long",function(){
var water_jar = new WaterJar();
expect(water_jar.length()).toEqual(1); //预期水缸的长度应该为1m
});
it("should be 0.8m width",function(){
var water_jar = new WaterJar();
expect(water_jar.width()).toEqual(0.8);
});
it("should be 0.5m height",function(){
var water_jar = new WaterJar();
expect(water_jar.height()).toEqual(0.5);
});
})
你可能会注意到,每个it()都需要创建一个新的water_jar实例。能不能只创建一个实例呢?这时候
beforeEach() 就出来啦。顾名思义,beforeEach:在每个(测试)之前。所以就可以把初始化放在 beforeEach() 里面:
beforeEach(function(){
var water_jar = new WaterJar();
})
这样每次测试开始前就会新建一个实例。可是如果测试数量足够多的话,就会造成内存使用过多。所以只新建一次变量,以后每个测试对新建的变量赋值,就可以大大降低内存的使用率。
describe("water_jar size",function(){
var water_jar; //定义变量
beforeEach(function(){
water_jar = new WaterJar(); //每次测试开始前都对变量进行赋值
})
it("should be 1m long",function(){ //测试长度是否为1m
expect(water_jar.length()).toEqual(1);
});
it("should be 0.8m width",function(){ //测试宽度是否为0.8m
expect(water_jar.width()).toEqual(0.8);
});
it("should be 0.5m height",function(){ //测试高度是否为0.5m
expect(water_jar.height()).toEqual(0.5);
});
})
再看看上面播放器的测试,你是不是能大概看懂了呢?
下一步就可以写你的实现代码啦。通过测试后就可以重构了。
分享到:
相关推荐
茉莉花 ESLint茉莉花规则用法将eslint-plugin-jasmine安装为dev依赖项: npm install --save-dev eslint-plugin-jasmine 通过将插件添加到您的.eslintrc来启用该插件: plugins : - jasmine ESLint本身为Jasmine的...
AngularJS TDD
让我们通过命令行运行您的 Jasmine 测试套件。 要开始使用命令行,您需要安装 NodeJS 和 NPM(您应该已经安装了它们)。 一旦你有了 Node 和 NPM,运行: sudo npm install jasmine-node 之后,您可以 cd 进入您...
此存储库设置为通过Jest运行程序测试运行性能的测试与通过Jasmine + JSm运行相同测试的性能。 此存储库用于帮助Jest团队复制和测试 。 设置 通过安装hyperfine : 安装依赖项: cd jasmine && yarn && cd .. cd ...
茉莉花 使用Jasmine进行测试驱动开发(TDD) 可以在这里预览
为了完成该项目,我主要使用提供的文件以及JQuery文档和Jasmine文档。 我还使用了源伪造和w3schools的一些小技巧。 我发现这个项目非常有用。 我可以看到自己在当前工作中的日常工作中使用了这种测试和TDD。 我发现...
通过 Capybara 运行 Jasmine Specs。 这样,您就可以在任何水豚的 javascript 驱动程序下运行它。 无头耶! 安装 将此行添加到应用程序的 Gemfile 中: gem 'capybara-jasmine', github: 'ngauthier/capybara-...
JavaScript测试框架Jasmine是JavaScript的行为驱动开发测试框架。 它不依赖浏览器,DOM或任何JavaScript框架。 因此,它适用于网站, 项目或任何可以运行JavaScript的地方。 文档和指南位于此处: : 有关Jasmine的...
Angular Hangman TDD 演示 抽象的 我编写了这个项目作为一个演示项目,用于一个名为“JavaScript 中的 TDD - 不是神话”的演讲,它是使用 yeoman wix 从 scracth 编写的 TDD 模式 本项目特点: 使用 jasmine 进行...
茉莉花发生器 用法 安装: npm install -g generator-jasmine 贡献 见 执照 BSD-2-条款
Jasmine-Headless-Webkit是一款基于jasmine的无图形化web工具
Jasmine是一个行为驱动JavaScript开发框架,用于运行浏览器和Node.js测试。 经过测试,它可在大多数版本的流行浏览器上使用,包括Safari,Chrome,Firefox和Internet Explorer。 Jasmine不依赖任何其他JavaScript...
JS TDD与茉莉,因果,古尔普 @ 2015年ATO 在此处查看幻灯片演示: : 检出/slides文件夹以查看实际的演示文稿。 使用本地http服务器会很有帮助: $ sudo npm install -g http-server $ cd slides $ http-server $...
这个 gem 使用 Capybara 来运行 Jasmine 规格。 请求一个页面一次,运行许多 JS 规范。 适用于 RSpec 和 。 请参阅以了解如何集成到应用程序中。 ##为什么? Capybara 是一个强大的工具,但我觉得它非常乏味和...
安装使用以下命令之一安装扩展: easy_install Flask-Jasmine 或者,如果您已安装pip: pip install Flask-Jasmine用法您可以通过创建Jasmine实例来初始化应用,并设置JavaScript的规范和来源: from flask import ...
npm install grunt-contrib-jasmine --save-dev 插件安装完成后,可以使用以下JavaScript代码在您的Gruntfile中启用它: grunt . loadNpmTasks ( 'grunt-contrib-jasmine' ) ; 茉莉花任务 使用grunt jasmine命令...
熟悉该过程后,您可以使用以下命令安装此插件: npm install grunt-jasmine-node --save-dev 安装插件后,可以使用以下 JavaScript 代码在 Gruntfile 中启用它: grunt . loadNpmTasks ( 'grunt-jasmine-node' ) ;...
茉莉花在Node.js中运行测试输出的问题应在Jasmine上报告。安装 $ npm install --save-dev gulp-jasmine用法 const gulp = require ( 'gulp' ) ;const jasmine = require ( 'gulp-jasmine' ) ;exports . default = ( ...
如果要将其添加为其他Vim插件,请添加~/.janus.rake : vim_plugin_task "vim-jasmine", "git://github.com/thomd/vim-jasmine.git"手动安装在~/.vim目录下下载并解压缩 。 另外,您也可以使用Makefile: make ...
Phantom-Jasmine 是一组简单的两个脚本,用于通过 Phantom.js ( ) 运行您的 Jasmine 测试。 第一个脚本 lib/console-runner.js 是 Jasmine 的一个插件,它通过 console.log(包含在 TestRunner.html 中的脚本标签中...