本文是对众多博客的学习和总结,可能存在理解错误。请带着怀疑的眼光,同时如果有错误希望能指出。
写 Nodejs
也有几个月了,但是一直都没有关注过 Nodejs
的自动化测试。之前在学习 Java Swing
的时候,也研究过几个不同的 GUI
自动化测试框架,比如:
这两天在看某些开源项目的时候,比如 Angular-dashboard-framework 和Angular-meterial-dashboard ,发现都使用了一些自动化测试的框架来进行软件的测试,比如: Mocha
, Jasmine
等等。
Nodejs
中的自动化测试框架很多,我们不能一一涉猎,我们会选取比较常见的几个来使用。
在开始我们的主题之前,我们会介绍测试中的几个简单的概念,然后再看一个简单的例子
TDD
, 测试驱动开发 (Test-Driven Development)
, BDD
, 行为驱动开发(Behavior-Driven Development)
.
所谓的 测试驱动开发 ,就是在开发之前,先编写一些测试,然后跑一遍测试(此时的结果肯定是全都不通过的),然后开发进行开发,再跑一遍测试,如果测试都通过了,那么表示测试通过。
那么 行为驱动开发 ,就是采用自然语言来描述测试的行为过程。 BDD
可以消除TDD
测试过程中不能发现的问题。
TDD
和 BDD
是一个复杂的话题,大家可以参考下面的文章:
断言在 Nodejs
软件测试过程中很是重要。 Nodejs
就默认提供了内置的断言库assert
,后面我们将要介绍的断言库都是基于 Nodejs
内置的断言库,比如大名鼎鼎的 shouold.js
, chai
, expect.js
等等。
断言库提供了很多语义化的方法来对值进行各种判断。相对于内置的断言库而言,should.js
等断言库提供了更为自然,更为丰富的判断方法。
目前博主接触的自动化测试框架主要是 Mocha
和 Jasmine
这两个。测试框架并不负责断言的判断,断言编写,它们只是才有一种更为合理整洁的方式来管理我们的断言。这就为我们使用自动化测试框架带来了很大的灵活性,比如在使用 Mocha
自动化测试框架的时候,博主决定采用 nodejs
内置的 assert
断言库来编写断言。不久之后,博主新学习了 should.js
,于是决定将之前用 assert
断言库写的测试全部用should.js
替换,这也是可以的。因为 should.js
, chai
等断言库都是基于nodejs
内置的 assert
断言库的。
首先创建一个工程
# create a new nodejs project
$ cd ~/desktop && mkdir nodejs-test
$ cd $_ && npm init
# enter some infomation here
# install some dependecies
$ npm install -g mocha
$ npm install --save-dev should
这时我们目录下就有一个 package.json
文件,然后新建一个 lib
目录,并在lib
目录中创建一个 math.js
文件,作为我们自己实现的模块。
# create lib and math module
$ mkdir lib && cd lib
$ emacs math.js
math.js
模块内容如下,并最后导入 add
函数, add
函数就是我们最后要测试的函数
/**
* add numbers
*/
function add(number1 , number2){
if(arguments && arguments.length === 0)
return null;
var numbers = Array.from(arguments);
var result = 0;
numbers.forEach(function(number) {
result += number;
});
return result;
};
module.exports = {
add:add
};
回到与 package.json
同级的根目录,新建一个 test
目录,然后新建 add-test.js
文件
$ cd .. && mkdir test && cd test
$ emacs add-test.js
add-test.js
文件的内容如下,主要是测试 add
函数,下面的测试内容分别是:
var should = require("should");
var add = require("../lib/math.js").add;
var assert = require("assert");
describe("add test", function () {
describe("with no input args",function () {
it("result should equal to null",function () {
(add() === null).should.be.true;
});
});
describe("add one number",function () {
it("result should equal to the number",function () {
add(1).should.equal(1);
});
});
describe("add two number",function name() {
it("result should equal to the number1+ number2",function () {
add(1,2).should.equal(3);
});
});
describe("add numbers",function name() {
it("result should equal to number1+ number2 + ...",function () {
add(1,2,3,4).should.equal(10);
});
});
});
回到工程跟目录,执行一下, mocha
,我们就可以看到下面的结果:
~/Desktop/nodejs-test $ mocha
add test
with no input args
√ result should equal to null
add one number
√ result should equal to the number
add two number
√ result should equal to the number1+ number2
add numbers
√ result should equal to number1+ number2 + ...
4 passing (8ms)
我们将 add
函数中的 +
操作符换成 -
,然后再运行一遍测试,除了第一个测试,剩下的测试都抛出异常了
add test
with no input args
√ result should equal to null
add one number
1) result should equal to the number
add two number
2) result should equal to the number1+ number2
add numbers
3) result should equal to number1+ number2 + ...
1 passing (10ms)
3 failing
1) add test add one number result should equal to the number:
AssertionError: expected -1 to be 1
+ expected - actual
--1
+1
at Assertion.fail (C:\Users\qeesung\Desktop\nodejs-test\node_modules\should\cjs\should.js:326:17)
at Assertion.Object.defineProperty.value (C:\Users\qeesung\Desktop\nodejs-test\node_modules\should\cjs\should.js:398:19)
at Context.<anonymous> (C:\Users\qeesung\Desktop\nodejs-test\test\add-test.js:14:27)
... more error here
原文转自:http://www.tuicool.com/articles/QVvY7jm