express-5 质量保证(2)
跨页测试###
跨页测试更有挑战性,因为需要你控制和观测浏览器。
现在设置一个跨页测试情境的例子。比如,你的网站上有一个包含联系表单的Request Group Rate页面。营销部门想知道客户是从哪个页面点击链接进入Request Group Rate页面的,他们想知道客户是否在查看胡德河之旅或者俄勒冈海岸退潮。关联上它需要有一些隐藏的表单域和JavaScript,并且测试将会涉及进入一个页面,然后点击Request Group Rate并验证隐藏域是否正确填充了。
- 首先创建一个旅游线路的页面:views/tours/hood-river.handlebars:
<h1>Hood River Tour</h1>
<a class="requestGroupRate"
href="/tours/request-group-rate">Request Group Rate.
</a>
- 一个引用页面,views/tours/request-group-rate.handlebars:
<h1>Request Group Rate</h1>
<form>
<input type="hidden" name="referrer">
Name: <input type="text" id="fieldName" name="name"><br>
Group size: <input type="text" name="groupSize"><br>
Email: <input type="email" name="email"><br>
<input type="submit" value="Submit">
</form>
<script>
$(document).ready(function(){
$('input[name="referrer"]').val(document.referrer);
});
</script>
- 在meadowlark.js中为这些页面创建路由:
app.get('/tours/hood-river', function(req, res){
res.render('tours/hood-river');
});
app.get('/tours/request-group-rate', function(req, res){
res.render('tours/request-group-rate');
});
要测试这个功能,需要一个浏览器,或者非常类似浏览器的东西;手动太麻烦了,我们希望它可以自动完成;目前有三种流行的解决方案:Selenium、PhantomJS和Zombie。
* Selenium: 超级健壮,有丰富的测试支持,但配置较复杂
* PhantomJS:确实提供了一个非客户端Webkit浏览器(跟Chrome和Safari用的是相同的引擎),所以跟Selenium一样,它也呈现出了非常高水平的现实性。然而它还没提供我们所需的简单的测试断言
* Zombie:没有使用已有的浏览器引擎,所以它不适合用来测试浏览器的功能特性,但用它来测试基本功能是非常好的; 但目前不支持window;
装Zombie:
npm install --save-dev zombie
创建一个新目录,简单地称其为qa(跟public/qa区分开)。在这个目录下创建qa/tests-crosspage.js文件:
var Browser = require('zombie');
var assert = require('chai').assert;
var browser;
suite('Cross-Page Tests', function() {
setup(function() {
browser = new Browser();
});
test('requesting a group rate quote from the hood river tour page' +
'should populate the referrer field', function(done) {
var referrer = 'http://localhost:3000/tours/hood-river';
browser.visit(referrer, function(){
browser.clickLink('.requestGroupRate', function(){
assert(browser.field('referrer').value === referrer);
done();
});
});
});
test('requesting a group rate from the oregon coast tour page should ' +
'populate the referrer field', function(done){
var referrer = 'http://localhost:3000/tours/oregon-coast';
browser.visit(referrer, function(){
browser.clickLink('.requestGroupRate', function(){
assert(browser.field('referrer').value === referrer);
done();
});
});
});
test('visiting the "request group rate" page dirctly should result ' +
'in an empty referrer field', function(done){
browser.visit('http://localhost:3000/tours/request-group-rate',
function(){
assert(browser.field('referrer').value === '');
done();
});
});
});
setup
的参数是一个函数,测试框架运行每个测试之前都会执行它,我们在这里为每个测试创建一个新的浏览器实例。
这里有三个测试。前两个检查如果你来自产品页面,引用页是否正确。方法browser.visit
会真正加载页面,页面加载完成后,就会调用回调函数。然后用方法browser.clickLink
找到class
为requestGroupRate
的链接,并访问它。链接目标页面加载完后调用回调函数,我们就到了Request Group Rate
页面上。剩下唯一要做的就是断言隐藏域referrer
跟我们原来访问的页面是匹配的。browser.field
方法会返回 一个DOM元素对象,具有value属性。最后一个测试只是确保直接访问Request Group Rate
页面时referrer
为空。
在进行测试之前,必须先启动服务器node meadowlark.js
。应该在另一个窗口中启动它,以便看到控制台错误。然后,运行测试看看我们做得怎么样(确保你有全局安装的Mocha:npm install -g mocha
):
mocha -u tdd -R spec qa/tests-crosspage.js 2>/dev/null
注意前面那个命令,我们用的是TDD界面(默认是BDD),还用了一个叫spec的报告。spec报告比默认报告提供的信息要多一些。(等你有上百个测试的时候,你可能还是想用默认报告。)最后,你可能会注意到我们扔掉了错误输出(2>/dev/null)。Mocha会报告失败测试的全部堆栈跟踪。这些信息可能有用,但一般你只想看到哪些测试通过了,哪些失败了。如果你需要更多信息,去掉2>/dev/null就能看到错误的细节了。
上面的例子有错误####
逻辑测试###
用Mocha做逻辑测试; 现在只有一个小小的功能,所以设置它相当容易。另外,因为只有一个组件,也不能做集成测试,所以只添加单元测试。
- 创建文件qa/tests-unit.js:
var fortune = require('../lib/fortune.js');
var expect = require('chai').expect;
suite('Fortune cookie tests', function() {
test('getFortune() should return a fortune', function() {
expect(typeof fortune.getFortune() === 'string');
});
});
- 运行Mocha来进行这个新的测试集:
mocha -u tdd -R spec qa/tests-unit.js
去毛###
最早的JavaScript去毛机是Douglas Crockford的JSLint; 此外Anton Kovalyov在2011年创建了JSLint的分支,于是JSHint诞生了。后者比前者更灵活
- 安装:
npm install -g jshint
- 运行,只要指定源文件名调用它就可以了:`jshint meadowlark.js`
用Gulp实现自动化###
持续集成###
基本上你每次向共享服务器贡献代码时,CI(持续集成)都会运行部分或全部测试。如果所有测试都通过了,通常什么也不会发生。另一方面,如果有测试失败了,后果一般是更加公开。这也是取决于你是如何配置CI的,但一般整个团队都会收到一封邮件说你“搞砸了构建”。
目前Node中最流行的CI服务器是Travis CI;此外还有Jenkins,TeamCity
express-5 质量保证(2)的更多相关文章
- express-4 质量保证(1)
QA 在Web开发中,质量可以分解为四个维度: 到达率: 到达率是指产品的市场普及程度,即查看网站或使用服务的人数.到达率和盈利能力是正相关关系:访问网站的人越多,购买产品或服务的人就越多.从开发的角 ...
- 如何安全的将VMware vCenter Server使用的SQL Server Express数据库平滑升级到完整版
背景: 由于建设初期使用的vSphere vCenter for Windows版,其中安装自动化过程中会使用SQL Server Express的免费版数据库进行基础环境构建.而此时随着业务量的增加 ...
- 【原】无脑操作:express + MySQL 实现CRUD
基于node.js的web开发框架express简单方便,很多项目中都在使用.这里结合MySQL数据库,实现最简单的CRUD操作. 开发环境: IDE:WebStorm DB:MySQL ------ ...
- Express 教程 01 - 入门教程之经典的Hello World
目录: 前言 一.Express?纳尼?! 二.开始前的准备工作 三.测试安装之经典的Hello World 四.使用express(1)来生成一个应用程序 五.说明 前言: 本篇文章是建立在Node ...
- VisualStudio 2015 开启IIS Express可以调试X64项目
现在项目开发时总有时需要在X64下开发,这样我们就需要IIS Express中调试.不要总是放在IIS中,在Attach这样好慢. 如果不设置直接调试X64的程序,我们有可能会受到以下类似的错误 ...
- Node.js Express连接mysql完整的登陆注册系统(windows)
windows学习环境: node 版本: v0.10.35 express版本:4.10.0 mysql版本:5.6.21-log 第一部分:安装node .Express(win8系统 需要&qu ...
- Node.js实现RESTful api,express or koa?
文章导读: 一.what's RESTful API 二.Express RESTful API 三.KOA RESTful API 四.express还是koa? 五.参考资料 一.what's R ...
- express全局安装后无法通过require使用
今天入门了一下express,首先安装依赖. npm install express -g; npm install body-parser -g; npm install cookie-parser ...
- 初步认识Node 之Express
通过本文,你会对Express有一个较为具体的了解. 起源 2009年6月26日,TJ Holowaychuk提交了Express的第一次commit,接下来在2010年1月2日,有660次co ...
随机推荐
- eclipse修改jdk后版本冲突问题
将安装的jdk1.8改为1.7之后出现了很淡疼的问题 修改工程下.setting/ org.eclipse.jdt.core.prefs eclipse.preferences.version=1or ...
- iOS 一个控件只能拥有一个父类
不多说上图.多么惨痛的教训,一个子控件 只有最后的一个被addsubview才会生效.
- JavaEE编码题
1.请编写代码实现登录效果(5分) 要求: 1)手写出相应的HTML和CSS代码 2)字体大小12px,表格宽300px,按钮行占两列并水平居中, 3)可以写在style节点内,也可使用行内CSS或者 ...
- iOS开发MAC下配置svn
版本控制对于团队合作显得尤为重要,那么如何在iOS开发中进行版本控制呢?在今天的博客中将会介绍如何在MAC下配置SVN服务器,如何导入我们的工程,如何在Xcode中进行工程的checkOut和Comm ...
- ubuntu下deb包的安装方法
ubuntu下deb包的安装方法 简介 deb是debian linus的安装格式,跟red hat的rpm非常相似,最基本的安装命令是:dpkg -i file.deb dpkg 是Debian P ...
- MongoDB配置文件YAML-based选项全解
配置文件部分 MongoDB引入一个YAML-based格式的配置文件.2.4版本以前的仍然兼容. 我的mongodb配置文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
- centos7 php7 httpd
安装php之前,要先安装几个 1.下载php源码:http://cn2.php.net/distributions/php-7.0.6.tar.gz. 2.然后使用命令:tar -zxvf php-7 ...
- sys.sysprocesses视图的使用小结
Sys.SysProcesses 系统表是一个很重要的系统视图,主要用来定位与解决Sql Server的阻塞和死锁包含正在 SQL Server 实例上运行的进程的相关信息.这些进程可以是客户端进程或 ...
- JAVA基础学习之final关键字、遍历集合、日期类对象的使用、Math类对象的使用、Runtime类对象的使用、时间对象Date(两个日期相减)(5)
1.final关键字和.net中的const关键字一样,是常量的修饰符,但是final还可以修饰类.方法.写法规范:常量所有字母都大写,多个单词中间用 "_"连接. 2.遍历集合A ...
- sdut 1592转置矩阵【稀疏矩阵的压缩存储】【快速转置算法】
转置矩阵 Time Limit: 1000ms Memory limit: 32768K 有疑问?点这里^_^ 题目链接:http://acm.sdut.edu.cn/sdutoj/proble ...