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就会测试不通过。

目录
相关文章
|
运维 关系型数据库 数据库
卸载OceanBase数据库的OCP
卸载OceanBase数据库的OCP
931 1
|
分布式计算 Java 大数据
Apache SeaTunnel 3 分钟入门指南
Apache SeaTunnel 3 分钟入门指南
1764 0
|
2月前
|
人工智能 JavaScript 网络安全
OpenClaw阿里云/本地部署图文教程:自动化工作流搭建, 一个人顶一支团队
GitHub 超 20 万星的开源 AI 助手框架 OpenClaw(前身为 Clawdbot、Moltbot),早已不是简单的聊天工具——它能同时连接 WhatsApp、Telegram、飞书等十多个平台,通过技能组合、定时任务、模型协同,搭建全流程自动化工作流,真正实现“一个人顶一支团队”。但很多用户部署后仅停留在“能聊天”阶段,未能发挥其核心自动化价值。
4121 9
|
19天前
|
人工智能 安全 API
阿里云百炼Token Plan团队版全解:套餐计费、模型生态、OpenClaw部署与Qwen3.6-Plus配置实战指南
在AI大模型全面进入团队协作与企业生产的时代,固定预算、稳定调用、多模型兼容、数据安全合规已成为企业与开发者的核心诉求。阿里云百炼推出的**Token Plan团队版**订阅服务,正是为解决上述痛点打造的一体化AI模型订阅方案。它以**Credits统一计量**为核心,整合文本生成、图像生成、多模态理解等全品类模型,兼容主流编程与智能体工具,提供三档包月坐席、团队权限管理、高峰不降速、数据不用于训练等企业级能力,彻底告别按量计费的不确定性与传统套餐的功能局限。
444 2
|
人工智能 JavaScript 开发工具
MCP详解:背景、架构与应用
模型上下文协议(MCP)是由Anthropic提出的开源标准,旨在解决大语言模型与外部数据源和工具集成的难题。作为AI领域的“USB-C接口”,MCP通过标准化、双向通信通道连接模型与外部服务,支持资源访问、工具调用及提示模板交互。其架构基于客户端-服务器模型,提供Python、TypeScript等多语言SDK,方便开发者快速构建服务。MCP已广泛应用于文件系统、数据库、网页浏览等领域,并被阿里云百炼平台引入,助力快速搭建智能助手。未来,MCP有望成为连接大模型与现实世界的通用标准,推动AI生态繁荣发展。
9861 66
|
存储 编译器 程序员
【C语言】auto 关键字详解
`auto` 关键字用于声明局部变量的自动存储类,其作用主要体现在变量的生命周期上。尽管现代C语言中 `auto` 的使用较少,理解其历史背景和作用对于掌握C语言的存储类及变量管理仍然很重要。局部变量默认即为 `auto` 类型,因此在实际编程中,通常不需要显式声明 `auto`。了解 `auto` 关键字有助于更好地理解C语言的存储类及其在不同场景中的应用。
836 1
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
202464 16
对话 | ECS如何构筑企业上云的第一道安全防线
|
机器学习/深度学习 并行计算 PyTorch
图像检测【YOLOv5】——深度学习
Anaconda的安装配置:(Anaconda是一个开源的Python发行版本,包括Conda、Python以及很多安装好的工具包,比如:numpy,pandas等,其中conda是一个开源包和环境管理器,可以用于在同一个电脑上安装不同版本的软件包,并且可以在不同环境之间切换,是深度学习的必备平台。) 一.Anaconda安装配置. 1.首先进入官网:https://repo.anaconda.com,选择View All Installers. 2.打开看到的界面是Anaconda的所以安装包版本,Anaconda3就代表是Python3版本,后面跟的是发行日期,我选择了最近的2022
299 26
|
Java Shell Linux
【Linux】shell编程基础(超详细,入门看这一篇就够了)(上)
【Linux】shell编程基础(超详细,入门看这一篇就够了)
1285 0

热门文章

最新文章