Jasmine - 文档(一)(上)

简介: Jasmine - 文档(一)(上)

前言

实习期间接触很多新东西。最近又在学习如何写一个独立的测试单元。看了公司前人的代码,后来网上搜寻了相关的知识,打算还是将自己的理解简单写下来。

简介

Jasmine是一种JavaScript的测试框架,它不依赖于其他框架,也不依赖于DOM结构。其语法特点在于简单清晰,就算是刚入门没多久的JavaScript程序猿也能够写出简单的测试单元代码。

下载 & 部署

下载地址https://github.com/jasmine/jasmine/releases

环境部署

解压后,dist 下就是各个版本的独立运行包,解压最新的 2.x 版本,双击打开 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">
    <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/xxx.js"></script>
</head>
<body>
</body>
</html>

快速入门

image.png

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title></title>
    <script src="jquery-1.11.3.js"></script>
    <link rel="stylesheet" type="text/css" href="jasmine-2.8.0/jasmine.css">
    <script src="jasmine-2.8.0/jasmine.js"></script>
    <script src="jasmine-2.8.0/jasmine-html.js"></script>
    <script src="jasmine-2.8.0/boot.js"></script>
</head>
<body>
    <script>
        function get1() {
            $.getJSON("http://localhost:8080/test/get").then(function(result) {
                console.log(result);
            });
        }
        // 每一个测试用例的超时时间
        jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;
        // 请求的接口的前缀 // http://localhost:8080/test
        var base = "/ajaxserverapache";
        //测试模块
        describe("ajax", function() {
            // 测试方法
            it("get请求", function(done) {
                // 服务器返回的结果
                var result;
                $.getJSON(base + "/get").then(function(jsonObj) {
                    result = jsonObj;
                });
                // 由于是异步请求,需要使用setTimeout来校验
                setTimeout(function() {
                    expect(result).toEqual({
                        "data" : "get ok"
                    });
                    // 校验完成,通知jasmine框架
                    done();
                }, 100);
            });
        });
    </script>
</body>
</html>

核心

Suites(describe)是Jasmine的核心,是一个测试集,里面包括多个specs(it),而每个specs里面可能包含多个断言(expect)。

1、Suites(describe)

Suites使用describe()来定义,其中传递两个参数为:

  • string:用于描述测试组的名称
  • function:是测试组的主体函数

测试组的代码如下:

describe("This is a suite", function() {
  it("This is a specs", function() {
    var a = 'abc';
    expect(a).toEqual('abc');
  });
});

代码使用describe()函数定义了一个名为“This is a suite”的测试组,测试组的内容在于判断a是否等于“abc”,主体内容将在后面继续介绍。

为了能够在测试开始前先进行部分初始化,或者在测试结束后对一些内容进行销毁,主体还包括四个全局函数:

  • beforeEach():在describe函数中每个Spec执行之前执行。
  • afterEach():在describe函数中每个Spec数执行之后执行。
  • beforeAll():在describe函数中所有的Specs执行之前执行,但只执行一次,在Sepc之间并不会被执行。
  • afterAll():在describe函数中所有的Specs执行之后执行,但只执行一次,在Sepc之间并不会被执行。

例如:

describe("This is a suite", function() {
  beforeEach(function(){
    var a = 'abc';
  });
  afterEach(function(){
    a = '';
  })
  it("This is a specs1", function() {
    expect(a).toEqual('abc');
  });
});

上述代码中,在每一个specs执行前都会声明变量a为“abc”,而在测试之后,都会将其置为空字符串。


2、嵌套describe

Suites可以嵌套定义,每层都可以包含自己的specs,并且进行测试。同样可以包含各自的beforeEach()和afterEach()等函数。例如:

describe("This is the first describe", function() {
  var a;
  beforeEach(function() {
    a = 'abc';
  });
  afterEach(function() {
    a = '';
  });
  it("is just a function", function() {
    expect(a).toEqual('abc');
  });
  describe("This is the second describe", function() {
    var b;
    beforeEach(function() {
      b = 'abc';
    });
    it("is just a function too", function() {
      expect(b).toEqual(a);
    });
  });
});

3、Specs(it)

Specs是测试组里的每个测试体,其中用it()函数定义测试体,传递两个参数:

string:用于描述测试体的名称

function:测试体的主体内容

如上一段代码中:

it("This is a specs", function() {
    expect(a).toEqual('abc');
});

则为一个测试体,当然,每个测试组Suites可以包含多个测试体,如下:

describe("This is a suite", function() {
  it("This is a specs1", function() {
    var a = 'abc';
    expect(a).toEqual('abc');
  });
  it("This is a specs2", function() {
    var b = {};
    expect(b).toBe({});
  });
  it("This is a specs3", function() {
    expect(c).toBeUndefined();
  });
});

代码定义了一个测试组 “This is a suite”,其中包括三个 specs,分别测试 a 是否等于 ‘abc’,b 是否和空对象一致,c 是否为undefined。

4、断言(expect)

Specs里面可能包含多个断言,只有在所有的断言都返回true时才会通过,否则测试失败。正如上面代码所示,expect(c).toBeUndefined();为一个测试语句,判断c变量是否为undefined。

expect()传递一个参数,为actual,接收实际值,而后面紧跟着一个Matchers传递一个(或没有),来进行判断是否通过。如例子所示,c为实际值,而ToBeUndefined()则为Matchers,进行的比较则为c(实际值)是否为undefined。

再比如:expect(a).toEqual('abc');传递的实际值为a,与“abc”进行判断是否相等。

注意:it函数块可以包含多个expect过程,只要有其中的expect不符合期望,it就会测试不通过;而describe也可以包含多个it,只要有中有一个it报错,那么describe就会测试不通过。

目录
相关文章
|
3天前
|
数据采集 Web App开发 JavaScript
Puppeteer自动化:使用JavaScript定制PDF下载
在现代Web开发中,自动化工具如Puppeteer可显著提升效率并减少重复工作。Puppeteer是一款强大的Node.js库,能够控制无头Chrome或Chromium浏览器,适用于网页快照生成、数据抓取及自动化测试等任务。本文通过示例展示了如何使用Puppeteer自动化生成定制化的PDF文件,并介绍了如何通过配置代理IP、设置user-agent和cookie等技术增强自动化过程的灵活性与稳定性。具体步骤包括安装Puppeteer、配置代理IP、设置user-agent和cookie等,最终生成符合需求的PDF文件。此技术可应用于报表生成、发票打印等多种场景。
Puppeteer自动化:使用JavaScript定制PDF下载
|
JavaScript 测试技术 API
|
5月前
|
JavaScript 测试技术
【sgGoogleTranslate】自定义组件:基于Vue.js用谷歌Google Translate翻译插件实现网站多国语言开发
【sgGoogleTranslate】自定义组件:基于Vue.js用谷歌Google Translate翻译插件实现网站多国语言开发
|
5月前
|
JavaScript
VueCli3+TypeScript3项目显示Markdown内容
VueCli3+TypeScript3项目显示Markdown内容
98 0
|
JavaScript 前端开发 Java
JavaScript —— JSchallenger Basics 基础练习(测试一下你的 JS 基础)【专题一】
JavaScript —— JSchallenger Basics 基础练习(测试一下你的 JS 基础)【专题一】
120 0
|
存储 关系型数据库 测试技术
快速入门nest.js(10/10)--测试
初识Jest 很好的错误消息和内置Mocking实用程序 可靠的并行运行测试 优先运行以前失败的测试 根据测试文件花费的时间重新组织测试运行
312 0
|
移动开发 算法 前端开发
tink.js # pixi辅助插件 — 中文翻译教程
tink.js # pixi辅助插件 — 中文翻译教程
149 0
sound.js # pixi辅助插件 — 中文翻译教程
sound.js # pixi辅助插件 — 中文翻译教程
291 0
|
存储 JSON 缓存
Ember.js 项目开发之 Ember Data
Ember.js 是一个基于MVVM模型的开源框架,该框架主要用于创建复杂的多页面应用程序。它最大的特点是:持续推出最新的特性,并不会丢弃任何旧功能。
148 0
Ember.js 项目开发之 Ember Data
Jasmine - 文档(一)(下)
Jasmine - 文档(一)(下)
191 0
Jasmine - 文档(一)(下)