用jasmine-node进行node测试
如果你对JavaScript测试稍有了解的话,你一定听说过Jasmine测试框架。它功能强大,而且容易上手,在浏览器端的JS单元测试方面负有盛名。而对于服务器端,你同样可以使用Jasmine框架的node模块jasmine-node来进行单元测试。在本文中,我们将用一个简单例子来介绍jasmine-node模块的用法。
首先,你需要全局安装jasmine-node:
sudo npm i -g jasmine-node
安装完成以后,你可以通过jasmine-node --version
命令来查看是否已经正确安装。
我们在本文中需要测试的是一个非常简单的计算模块calculator,它只有一个非常简单的multiply功能。当然,现在还没有实现:
#calculator.js
exports.multiply = function(multiplier1,multiplier2){
};
我们将我们的specs放到一个叫做spec的文件夹中,于是当我们运行jasmine-node时,我们需要为其传递一个参数:jasmine-node spec
。你可以通过运行jasmine-node来查看所有的可选参数。
我们现在将测试代码写入spec/calculator-spec.js文件中。你总是应该将你的测试代码文件命名为*-spec.js。因为jasmine-node默认只会运行这些文件。
# spec/calculator-spec.js
var calculator = require("../calculator");
describe("multiplication", function () {
it("should multiply 2 and 3", function () {
var product = calculator.multiply(2, 3);
expect(product).toBe(6);
});
});
在calculator-spec.js文件中我们在一开始就require了calculator模块。这个例子检查了2和3做乘积的结果。当我们运行这个测试时,我们得到的结果如下所示:
为了让我们的测试通过,我们现在需要来完善我们的calculator模块,我们首先让它返回6。
# calculator.js
exports.multiply = function (multiplier1, multiplier2) { this is a very long text that exceeds the blog page.
return 6;
};
再次运行jasmine-node spec命令,我们发现测试通过了。但是每次都要手动运行测试实在是很麻烦的一件事。因此我们可以使用jasmine-node –autotest命令,它能够在每次我们的文件发生变化时自动运行测试。
到目前为止我们的测试还没结束,现在我们来添加上第二个spec:
# spec/calculator-spec.js
it("should multiply 3 and 5", function () {
var product = calculator.multiply(3, 5);
expect(product).toBe(15);
});
只要我们保存了文件,测试将会自动执行。此时很明显的我们会得到一个错误,因为6不等于15.因此我们现在来对calculator模块进行一些修改:
# calculator.js
exports.multiply = function (multiplier1, multiplier2) {
return 15;
};
但是当我们保存calculator.js文件时,什么都没有发生。这是因为我们在前面执行jasmine-node spec --autotest
命令时,jasmine-node只会关注spec目录中文件的变化。当然我们可以运行jasmine-node . --autotest
来让jasmine-node关注全部文件的变化,但是这里存在的一个问题是jasmine-node会在所有的文件中查找spec文件,在一些大型的项目中,这会耗费大量的时间。于是我们有另一个解决办法:
jasmine-node spec --autotest --watch .
此时,jasmine-node会观察所有文件的变化并只在spec目录中寻找测试文件。
当我们再次保存文件时,我们发现第一个spec没有同感呀,于是我们将calculator模块改成正确的形式:
# calculator.js
exports.multiply = function (multiplier1, multiplier2) {
return multiplier1 * multiplier2;
};
保存文件,你会发现两个测试都通过了!jasmine-node是一个功能强大的node代码测试工具,它也包含了很多在本文中没有提及的功能,更多的信息,你可以通过运行jasmine-node来查看或者在Github上查阅jasmine-node的README文件。
本文参考自Testing node.js applications with Jasmine,原文地址http://blog.codeship.io/2013/08/20/testing-tuesday-19-how-to-test-node-js-applications-with-jasmine.html
如果你觉得本文对你有帮助,请为我提供赞助https://me.alipay.com/jabez128
好高产 一定是神降临