测试Node.js 应用程序
2016-03-03 15:00
495 查看
在计算机编程中,单元测试(又称为模块测试, Unit Testing)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。
程序的测试是每个开发人员必须要做的事情,这个事情我们不能全部交给测试人员。给应用程序编写测试是许多开发人员不做的事情,但是如果代码库小而且项目只有一个开发人员的话,倒也无妨。但是随着应用程序的改变,变得越来越复杂,要确保代码的稳定性越来越困难,因此测试变成了必不可少。单元测试根据主流的分类可以分成两类,分别是
1、使用assert 模块进行测试
2、使用Nodeunit模块进行测试
3、使用Vows模块进行测试
Assert 断言模块
Node.js 在assert模块中提供了一个简单的测试框架。它提供一组断言方法,让开发人员可以简单的创建低级应用测试。
为何使用Node.js中的assert模块,我们需要在脚本中请求它,这个与请求其他模块一样:
如果测试通过,则在终端上看不到任何输出结果,除非有问题存在,所谓没有问题就是最好的问题。
修改上面的代码替换为
然后再次执行程序,你会发现此时程序抛出一个异常。默认情况下,AsserError显示的是失败的比较,不过也可以传递第三个参数,它会在异常抛出的时候显示出来:
Nodeunit 测试
Nodeunit 构建于Node 的assert模块之上,添加了建立与拆卸测试的能力、一部测试能力以及模拟(mock)和桩(stub)的功能。Nodeunit可以通过npm使用全局标记安装到计算机上。
npm install -g nodeunit
编写测试代码
exports.firstTest = function(test){
test.expect(1);
test.strictEqual("hello", "hello");
test.done();
};
exports.secondTest = function(test){
test.expect(1);
test.strictEqual("hello", "there");
test.done();
}; 每个测试都声明成exports.testName,这里的testName是测试的描述,在测试的开始处,声明了test.expect(n),这里的n是期望的断言数。这用于避免通过假测试。 在完成测试之后,一定要调用test.done()来表示测试完成。
如果执行以上的代码,可以看到一个测试通过,而另外一个测试失败。并带有失败测试的堆栈踪迹。
Vows 模块
Vows是一个第三方模块,用于以BBD风格的测试Node.js应用程序。可使用npm全局安装Vows;
npm install -g vows Vows也是建立在assert模块之上的,它加入了BDD风格的测试,我们在如下的代码中将使用同步测试示例。
var vows = require('vows'),
assert = require('assert');
vows.describe('Comparing strings').addBatch({
'when comparing the same strings': {
topic: "hello",
'they should be equal': function (topic) {
assert.strictEqual (topic, "hello");
}
},
'when comparing different strings': {
topic: "hello",
'they should not be equal': function (topic) {
assert.notStrictEqual (topic, "there");
}
}
}).run();
注意,Vows 鼓励用户在测试中使用大量平白的英文,这不仅可帮助用户从外往内思考应用程序,也有助于测试报表的编写,测试失败的处理。Vows以如下方式用平台英语描述功能:
Description(描述)-----测试套组的描述。
Context(上下文)----测试运行的上下文。
Topic(主题)----要测试的是什么。
Vow(宣告)----期望在测试中发生的是什么。
执行上面的代码,如果测试通过,输出将列出得到的荣耀(honored)的宣告数量,如果测试失败,报告将包括上下文、宣告以及异常的第一行。
程序的测试是每个开发人员必须要做的事情,这个事情我们不能全部交给测试人员。给应用程序编写测试是许多开发人员不做的事情,但是如果代码库小而且项目只有一个开发人员的话,倒也无妨。但是随着应用程序的改变,变得越来越复杂,要确保代码的稳定性越来越困难,因此测试变成了必不可少。单元测试根据主流的分类可以分成两类,分别是
BDD(Behavior-Driven Development,即行为驱动开发)和
TDD(Test-Driven Development,即测试驱动开发)今天将对学习的Node.js测试内容进行介绍:
1、使用assert 模块进行测试
2、使用Nodeunit模块进行测试
3、使用Vows模块进行测试
Assert 断言模块
Node.js 在assert模块中提供了一个简单的测试框架。它提供一组断言方法,让开发人员可以简单的创建低级应用测试。
为何使用Node.js中的assert模块,我们需要在脚本中请求它,这个与请求其他模块一样:
var assert=require('assert');而后可以使用模块提供的断言方法。比如我们可以使用assert.strictEqual()方法来比较两个的值是否相等:
assert.strictEqual("hello","hello");完整脚本如下:
var assert = require('assert'); assert.strictEqual("hello", "hello");然后另存为test.js文件,在命名行输入:
node test.js
如果测试通过,则在终端上看不到任何输出结果,除非有问题存在,所谓没有问题就是最好的问题。
修改上面的代码替换为
assert.strictEqual("hello", "there");
然后再次执行程序,你会发现此时程序抛出一个异常。默认情况下,AsserError显示的是失败的比较,不过也可以传递第三个参数,它会在异常抛出的时候显示出来:
assert.strictEqual("hello", "there","Message to show if an exception is shown");
Nodeunit 测试
Nodeunit 构建于Node 的assert模块之上,添加了建立与拆卸测试的能力、一部测试能力以及模拟(mock)和桩(stub)的功能。Nodeunit可以通过npm使用全局标记安装到计算机上。
npm install -g nodeunit
编写测试代码
exports.firstTest = function(test){
test.expect(1);
test.strictEqual("hello", "hello");
test.done();
};
exports.secondTest = function(test){
test.expect(1);
test.strictEqual("hello", "there");
test.done();
}; 每个测试都声明成exports.testName,这里的testName是测试的描述,在测试的开始处,声明了test.expect(n),这里的n是期望的断言数。这用于避免通过假测试。 在完成测试之后,一定要调用test.done()来表示测试完成。
如果执行以上的代码,可以看到一个测试通过,而另外一个测试失败。并带有失败测试的堆栈踪迹。
Vows 模块
Vows是一个第三方模块,用于以BBD风格的测试Node.js应用程序。可使用npm全局安装Vows;
npm install -g vows Vows也是建立在assert模块之上的,它加入了BDD风格的测试,我们在如下的代码中将使用同步测试示例。
var vows = require('vows'),
assert = require('assert');
vows.describe('Comparing strings').addBatch({
'when comparing the same strings': {
topic: "hello",
'they should be equal': function (topic) {
assert.strictEqual (topic, "hello");
}
},
'when comparing different strings': {
topic: "hello",
'they should not be equal': function (topic) {
assert.notStrictEqual (topic, "there");
}
}
}).run();
注意,Vows 鼓励用户在测试中使用大量平白的英文,这不仅可帮助用户从外往内思考应用程序,也有助于测试报表的编写,测试失败的处理。Vows以如下方式用平台英语描述功能:
Description(描述)-----测试套组的描述。
Context(上下文)----测试运行的上下文。
Topic(主题)----要测试的是什么。
Vow(宣告)----期望在测试中发生的是什么。
执行上面的代码,如果测试通过,输出将列出得到的荣耀(honored)的宣告数量,如果测试失败,报告将包括上下文、宣告以及异常的第一行。
相关文章推荐
- nw.js node-webkit系列(15)如何使用内部模块和第三方模块进行开发
- 模拟namenode宕机:数据块损坏,该如何修复
- nodejs express request 和 response 对象的具体介绍:
- 初步使用Node连接Mysql数据库
- 《Inode与Block重要知识总结核心讲解》
- 使用Node.js+Socket.IO搭建WebSocket实时应用
- leetcode第24题——**Swap Nodes in Pairs
- [LeetCode]237. Delete Node in a Linked List
- 一个基于node与mysql的打卡小应用
- lintcode-easy-Nth to Last Node in List Show result
- 《Node.js开发实战详解》学习笔记
- 初步使用Node连接Mysql数据库
- 24. Swap Nodes in Pairs
- [LeetCode OJ] 19. Remove Nth Node From End of List
- node.js 安装配置 npm ,express,ejs模板
- 使用Node.js+Socket.IO搭建WebSocket实时应用【转载】
- Leetcode ☞237. Delete Node in a Linked List ☆
- 24. Swap Nodes in Pairs
- Leetcode237:Delete Node in a Linked List
- NodeJS