Jasmine 是什么工具
Jasmine 是一个强大的开源单元测试行为驱动开发框架,适用于JavaScript,并且可以测试任何类型的JavaScript应用程序。它诞生于2010年,并且可以测试同步和异步的JavaScript代码。它不依赖于任何其他JavaScript框架。Jasmine工具主要由Angular开发者使用,这是因为Jasmine在Angular项目中被原生包含在内。
Jasmine工具的特点:
- Jasmine可用于 浏览器 和 Node.js ,提供了清晰的语法以便编写测试。
- Jasmine还提供了行为驱动的测试,并且不需要DOM(文档对象模型)来编写测试用例。
- Jasmine支持异步测试。
- 为实现测试替身,Jasmine使用”spies”。
- Jasmine被类似Python和Ruby的语言使用。
- Jasmine是一个 一揽子 库,提供了我们测试代码所需的一切。
Jasmine工具的工作原理: Jasmine是一个让我们的代码易于阅读的JavaScript框架。在Jasmine中,要理解它的工作原理,我们需要了解它的两个重要术语: 套件和规格。
-
套件: 一组测试用例称为Jasmine套件。它用于测试JavaScript代码的特定动作/行为(可以是JavaScript对象或函数)。它的全局函数描述了两个参数 – 第一个参数显示 测试套件的标题 ,第二个参数显示实现测试套件的 函数 。
//This is test suite
describe("Test Suite", function() {
//...
});
- Spec: 我们可以将Jasmine spec定义为“测试套件中的测试用例”。它的全局函数包含两个参数:第一个参数显示测试套件的标题,第二个参数显示实现测试套件的函数。它包含一个或多个期望值,期望值基本上是一个可以为真或为假的断言。
//This is test suite
describe("Test Suite", function() {
it("test spec", function() {
expect( expression ).toEqual(true);
});
});
Jasmine工具的安装: 我们可以在项目中使用以下命令本地安装Jasmine:
npm install --save-dev jasmine
我们可以使用“ npx jasmine … ”命令来调用CLI工具,使用上述本地安装的Jasmine。另一方面,我们可以全局安装Jasmine,这样我们就可以在不使用 npx 的情况下调用CLI工具。但是不建议全局安装Jasmine,因为很难将全局安装的jasmine版本与使用它的每个项目保持同步。
npm install -g jasmine
- 初始化项目: 我们可以以非常简单的方式为Jasmine初始化一个项目。只需创建一个 spec目录 和 配置JSON文件 即可完成:
npx jasmine init
实施Jasmine工具: Jasmine的实施包括多种方式,如下所述:
- 实施/使用Jasmine作为库。
- 使用独立的Jasmine(通过使用
<script>
标签包含Jasmine Core & test文件)。- 通过CLI实现/使用Jasmine。
我们将详细讨论上述所有问题。
实现/使用Jasmine作为库: Jasmine可以在我们的项目中使用各种方法和路径作为库。
示例:在这个例子中,首先我们需要导入(require) Jasmine。然后,我们使用loadConfigFile()方法来加载从spec/support/jasmine. js文件中获取的配置文件。. json
路径,最后我们将执行Jasmine。
var Jasmine = require('jasmine');
var jasmine = new Jasmine();
jasmine.loadConfigFile('spec/support/jasmine.json');
jasmine.configureDefaultReporter({
showColors: false
});
jasmine.execute();
使用独立的Jasmine(通过使用<script>
标签包含Jasmine Core & test文件):对于这个实现,我们首先需要从GitHub链接下载最新版本的Jasmine,然后在你要测试的项目文件夹中解压缩zip文件。该文件夹的内容包含一组默认的文件和文件夹,如下所示:
/lib: It contains the core Jasmine files.
/src: It contains the source files that we want to test. These files also includes
deleted files if we already have our project's folder setup or can also be used
when appropriate for hosting our source code.
/spec: It contains the tests that we are going to write.
SpecRunner.html: This file is used as a test runner. We can run our specs by simply
launching this file.
我们需要更改/src和/spec文件夹中的文件,以在默认的**SpecRunner.html **文件中包含我们实际的源文件和测试文件
示例:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Jasmine Spec Runner v3.2.1</title>
<link rel="shortcut icon"
type="image/png"
href="lib/jasmine-3.2.1/jasmine_favicon.png">
<link rel="stylesheet"
href="lib/jasmine-3.2.1/jasmine.css">
<script src="lib/jasmine-3.2.1/jasmine.js"></script>
<script src="lib/jasmine-3.2.1/jasmine-html.js"></script>
<script src="lib/jasmine-3.2.1/boot.js"></script>
<!-- include source files here... -->
<script src="src/Player.js"></script>
<script src="src/Song.js"></script>
<!-- include spec files here... -->
<script src="spec/SpecHelper.js"></script>
<script src="spec/PlayerSpec.js"></script>
</head>
<body>
</body>
</html>
通过CLI实现/使用Jasmine: Jasmine CLI允许我们轻松运行Jasmine测试。默认情况下,输出运行在终端中。为了更好地深入理解,首先我们需要运行以下命令来全局安装Jasmine:
npm install -g jasmine
- 下一步是为我们的项目创建一个文件夹,并在其中导航:
$ mkdir jasmine-project $ cd jasmine-project
- Jasmine.json 文件创建好了. 下面是默认jasmine.json 文件的内容:
示例:
{
"spec_dir": "spec",
"spec_files": [
"**/*[sS]pec.js"
],
"helpers": [
"helpers/**/*.js"
],
"stopSpecOnExpectationFailure": false,
"random": true
}
其中,
- spec_dir:指定Jasmine查找测试文件的路径。
- helpers:指定Jasmine查找辅助文件的路径。这些帮助文件在specs/这些帮助文件可用于定义自定义匹配器之前执行。
- **spec_files **:指定测试文件的模式,这意味着默认情况下所有JS文件都以Spec或Spec字符串结尾。
- stopSpecOnExpectationFailure:当设置为true时,将在第一个期望失败时立即停止规范(可以通过- stop-on-failure作为CLI选项使用)。
- random:当设置为true时,Jasmine将伪随机地运行测试用例(可以通过-random在CLI中使用)。
示例: 本例介绍Jasmine工具的使用方法。
describe("Nested Describe Demo", function () {
beforeEach(function () {
console.log("beforeEach level 1");
});
describe("MyTest level2", function () {
beforeEach(function () {
console.log("beforeEach level 2");
});
describe("MyTest level3", function () {
beforeEach(function () {
console.log("beforeEach level 3");
});
it("is a simple spec in level3", function () {
console.log("A simple spec in level 3");
expect(true).toBe(true);
});
afterEach(function () {
console.log("afterEach level 3");
});
});
afterEach(function () {
console.log("afterEach level 2");
});
});
afterEach(function () {
console.log("afterEach level 1");
});
});
在浏览器中执行对应的HTML文件时,我们可以观察到控制台的输出,如下所示:
输出:在上面的代码中,describe函数用于对相关规范进行分组。而字符串参数用于命名specs集合(spec表示测试套件中的测试用例)。
beforeEach level 1
beforeEach level 2
beforeEach level 3
A simple spec in level 3
afterEach level 3
afterEach level 2
afterEach level 1
Jasmine工具的优点:
- Jasmine是独立于浏览器、框架、平台和语言的。
- 它提供了干净且可读的语法,以便使用内置的匹配器轻松编写测试。
- Jasmine同时支持测试驱动开发和行为驱动开发。
Jasmine工具的缺点:
尽管使用Jasmine有很多优点,但也有缺点。这些都是:
- 它需要大量配置。
- 使用Jasmine工具的用户必须在使用它之前选择一个断言库或模拟框架。
- 配置的过程可能非常令人沮丧。
参考: https://jasmine.github.io/