用jasmine-node进行node单元测试
发布在Node.js测试研究2014年3月23日view:6573
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

enter image description here

用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做乘积的结果。当我们运行这个测试时,我们得到的结果如下所示:

#图1

为了让我们的测试通过,我们现在需要来完善我们的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

评论
发表评论
3年前

好高产 一定是神降临

WRITTEN BY
张小俊128
Intern in Baidu mobile search department。认真工作,努力钻研,期待未来更多可能。
TA的新浪微博
PUBLISHED IN
Node.js测试研究

介绍Node.js的相关知识

我的收藏