您的位置:首页 > Web前端 > Node.js

测试Node.js 应用程序

2016-03-03 15:00 495 查看
在计算机编程中,单元测试(又称为模块测试, Unit Testing)是针对程序模块(软件设计的最小单位)来进行正确性检验的测试工作。程序单元是应用的最小可测试部件。在过程化编程中,一个单元就是单个程序、函数、过程等;对于面向对象编程,最小单元就是方法,包括基类(超类)、抽象类、或者派生类(子类)中的方法。

程序的测试是每个开发人员必须要做的事情,这个事情我们不能全部交给测试人员。给应用程序编写测试是许多开发人员不做的事情,但是如果代码库小而且项目只有一个开发人员的话,倒也无妨。但是随着应用程序的改变,变得越来越复杂,要确保代码的稳定性越来越困难,因此测试变成了必不可少。单元测试根据主流的分类可以分成两类,分别是
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)的宣告数量,如果测试失败,报告将包括上下文、宣告以及异常的第一行。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: