基于Jasmine 的 Javascript 测试 -- 第七章
发布在基于Jasmine的Javascript测试2013年10月15日view:4630
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

第七章 和其他工具一起使用Jasmine


在前面的章节中已经展示了如何在浏览器环境下使用Jasmine对Javascript代码进行测试,但是这并不是使用Jasmine的唯一方式。Jasmine可以和其他工具一起在不同的环境之下运行。

Jasmine和Coffeescript

Coffeescript是一种能够编译为Javascript的语言,并且它很优美。他它不仅使得我们能够更加轻松的编写Javascript代码,同时也使你的Jasmine代码看起来更加的简洁。选择在Coffeescript环境下使用Jasmine是一个自然而然的过程,它确实让你的specs看起上去漂亮了许多。

如果你现在还没开始使用Coffeescript,那么我强烈推荐你尝试一下。Coffeescript减少了在编写Javascript代码中那些让我们头疼的情形。如果你会写Javascript,学会Coffeescript几乎不是什么难事。有一些人确实不喜欢Coffeescript,当然,使用与否完全却取决于你。

如果你想尝试一下Coffeescript,你可以查看一下Coffeescript.org,在那你能找到安装指南和文档。如果你已经安装了npm,你可以像这样安装coffeescript:

 sudo npm install -g coffee-script

如果你没有安装那npm,并且想以另一种方式是使用Coffeescript,查看Coffeescript网站去获取更多使用信息。

在Coffeescript下使用Jasmine的其中一点好处是可以有选择的使用括号。下面两行代码在Coffeescript中是完全等价的:

 alert("Hello world!")
 alert "Hello world!"

在Jasmine中,describe 和 it 仅仅只是函数,因此你可以在不使用小括号和中括号让你的specs看起来更漂亮。你的specs可以这样来写:

 describe "CoffeeScript Jasmine specs", ->
     it "is beautiful!", ->
             expect("your code is so beautiful").toBeTruthy()

很漂亮,不是吗?

不幸的是,你不能移除 expect 接受参数的括号。但是在代码的其他部分,括号完全可以有选择的使用。

想要了解更多有关Coffeescript的信息,去看看Alex McCaw写的 Coffeescript小书(The Little Book on CoffeeScript) 吧!

Jasmine 和 Node.js

乳沟你想要在你的Node.js项目中使用Jasmine,完全没问题!当然,你也可以使用Jasmine来测试基于浏览器的项目。

在 Unix 和 Linux 环境下安装 jasmine-node

首先你需要安装jasmine-node包。在你的终端中输入以下代码:

 sudo npm install -g jasmine-node

其中的 -g 标识符表示你在系统中全局安装 jasmine-node。如果你只是想在一个项目中安装,把 -g 标示符去掉即可。这也意味着你(可能)不需要具备 sudo 权限。

在 Windows 环境下安装 jasmine-node

首先,下载 jasmine-node 的ZIP压缩包。

解压并将文件夹命名为 jasmine-node。完成之后,将该文件夹移动到你安装node.exe的同意目录之下。你就可以使用了!

基本用法

现在你已经安装了 jasmine-node。像下面一样使用它:

 jasmine-node /path/to/project/directory

Jasmine-node 要求你将specs放入一个叫spec的目录之下并且所有的specs文件名称都要以 .spec.js 结尾。你也可以将spec文件放在spec目录的子目录下。

例如,如果你在 src/test.js 文件中有这样一个函数:

 global.hello = function() {
   return 'world';
 };

一个测试的spec看起来可能是下面这样:

     // 用require包含了我们所需要测试的代码:这是jasmine-node的特别之处
      require("../src/test.js");

     describe("hello", function() {
        it('returns "world"', function() {
     expect(hello()).toEqual("world");
     });
         });

除了添加一个require函数,specs 的其他部分看上去和浏览器下的Jasmine specs完全一样--除了一个异步成分,仅仅如此。

使用Jasmine-node进行异步测试

异步测试的方法与“正常的” Jasmine测试方法如出一辙,但是有一个特别的函数需要使用:done 函数。 它像 jasmine-node 发出信号表明:测试完成了。

下面是我们使用异步测试的一个例子:

         it("does an asynchronous call", function() {
              exampleAsyncCall(function(response) {
             expect(response).toContain("something expected");
             done();
             });
         });

done函数能告诉jasmine-node:嗨,这里有一个异步函数,不要结束它直到done函数被调用,除非它花费了太长时间导致其它部分超时(5秒之后)。你可以通过改变jasmine.DEFAULT_TIMEOUT_INTERVAL来改变超时时间,如下所示:

 //将默认超时时间修改为2秒
 jasmine.DEFAULT_TIMEOUT_INTERVAL = 2000;

jasmine-node 和 coffeescript

如果你想要和coffeescript一起使用jasmine-node,也没问题。你需要将你的specs的文件名改为*.spec.coffee 并在运行时使用 --coffee 标示符。如下所示:

 jasmine-node /path/to/project/directory --coffee

你要做的就是这么简单。Jasmine-node会找到 .spec.coffee文件并开始测试。

Jasmine 和 Ruby on Rails

Jasmin在Ruby on Rails 之下也能正常运转,它能直接测试Javascript代码而不需要额外编写一个spec runner 文件。

Jasmine的文档推荐使用 Ryan Bates’s RailsCasts 作为在Rails 3+ 的环境下使用Jasmine的方式。我认为这是一个很好的资源,如果你感兴趣可以去详细查阅具体信息。或者你可以看看下面简要说明。

安装

首先,你需要在你的 Gemfile 中安装 Jasmine:

       gem "jasmine"

然后安装:
bundle install rails generate jasmine:install

使用方法

现在你已经完成了安装工作!这个过程创建了一个spec目录,如果你之前没有创建的话。其中包含一个叫做 javascripts 的文件夹。在下面的例子中,我们将在 spec/javascript 目录下创建一个测试 spec ,它包含以下代码:

     describe("Jasmine + Rails test", function() {
      it("works", function() {
   expect(true).toBeTruthy();
     });
      });

将它保存命名为test.spec.js。

现在,在任何目录下,运行如下命令:

    rake jasmine

在一小段“卡擦卡擦”的启动过程之后。jasmine告诉你你的测试地址位于http://localhost:8888。用浏览器打开这个地址,你会看到你的测试通过了!现在你可以修改你的 test.spec.js 文件去看看都发生了些什么。

如果你想在终端中运行测试,你可以运行:

 rake jasmine.ci

如果你有 helpers (比如 Jasmine 的插件 ),将它们放入 spec/javascripts/helpers 目录中即可,它们能自动被包含进测试中。

Jasmine 和 NO-Rails Ruby

在Ruby环境下使用Rails并不一定需要Rails。首先,你需要安装 Jasmine gem。

如果你在项目中使用 Bundler,在 Gemfile 中添加如下代码:

 gem "jasmine"

如果没有,运行下面命令行:

 gem install jasmine

一旦你安装了jasmine,你可以像如下这样运行:

 jasmine init
 rake jasmine:ci

现在就可以运行啦!

更多工具

有许多方法可以将jasmine整合进入你的工程中。本文中只覆盖了其中几个,但事实上还有很多。在jasmine的 wiki 上专门有一个部分讲述怎么和 Scala, Java, .NET等等一起使用Jasmine。


本系列文章译自Javascript testing with Jasmine,2013年3月由O’Reilly 出版社出版。

翻译文章需要花费大量时间和精力。如果您觉得本文对自己有帮助,请点击下面链接为我提供一些赞助。您的赞助是我继续前进的动力。

评论
发表评论
5年前

乳沟?

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

本系列文章译自Javascript testing with Jasmine,2013年3月由O’Reilly 出版社出版。

我的收藏