Javascript测试框架Jasmine(一):简介

2014-06-27 · 11 min read

随着 javascript 程序的复杂度加深,测试的重要性越来越明显。Javascript 的测试框架有很多,例如:Jasmine,Qunit,JsTestDriver,JSUnit,Mocha 等。经过一番对比后决定使用 Jasmine。Jasmine 是一套 Javascript 行为驱动开发框架(BDD),干净简洁,表达力强且易于组织,不依赖于其他任何框架和 DOM,可运行于 Node.js,浏览器端或移动端。

下载运行#

下载GitHub 上的项目。解压后,dist 下就是各个版本的独立运行包,解压最新的 2.0.0 版本,双击打开SpecRunner.html 即可运行测试,注意要在SpecRunner.html<head> 内引用 Jasmine 的 js 文件和测试文件。想简单使用的话,将soucre/spec 下的测试文件替换成你自己的即可。

<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Jasmine Spec Runner v2.0.0</title>

    <link rel="shortcut icon" type="image/png" href="lib/jasmine-2.0.0/jasmine_favicon.png">.html"
    <link rel="stylesheet" type="text/css" href="lib/jasmine-2.0.0/jasmine.css"

    <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine.js"></script>"
    <script type="text/javascript" src="lib/jasmine-2.0.0/jasmine-html.js"></script>"
    <script type="text/javascript" src="lib/jasmine-2.0.0/boot.js"></script>"

    <!-- 被测试的代码 -->
    <script type="text/javascript" src="src/Player.js"></script>"
    <script type="text/javascript" src="src/Song.js"></script>"

    <!-- 测试用例代码 -->
    <script type="text/javascript" src="spec/SpecHelper.js"></script>"
    <script type="text/javascript" src="spec/PlayerSpec.js"></script>"

</head>

<body>
</body>
</html>

我把官方的例子部署在了我的 Demo 站上,点击查看。下面讲一些基础。

Suites#

Suites 可以理解为一组测试,使用全局的 Jasmin 函数describe 创建。describe 函数接受两个参数,一个字符串和一个函数。字符串是这个 Suites 的名字或标题(通常描述下测试内容),函数是实现 Suites 的代码块。

Specs#

Specs 可以理解为一个测试,使用全局的 Jasmin 函数it 创建。和describe 一样接受两个参数,一个字符串和一个函数,函数就是要执行的测试,字符串就是测试的名字。一个 Spec 可以包含多个 expectations 来测试代码。在 Jasmine 中,一个 expectations 就是一个断言,只能是truefalse 。只有全部 expectations 是true 的时候 spec 才会通过。

由于describeit 块实质上都函数,所有他可以包含任何的可执行代码。javascript 的作用域规则也是适用的,所以describe 内定义的变量,其内部所有的it 都能访问到。

Expectations#

expectations 由expect 函数创建。接受一个参数。和 Matcher 一起联用,设置测试的预期值。

最后看个最简单的例子:

describe('A suite', function () {
  it('contains spec with an expectation', function () {
    expect(true).toBe(true)
  })
})

下一篇讲一下 Matcher