JS测试框架—Jasmine基础
基本概念
describe
describe 是 Jasmine 的全局函数,作为一个 Test Suite 的开始,它通常有 2 个参数:字符串和方法。字符串作为特定 Suite 的名字和标题。方法是包含实现 Suite 的代码。
describe("This is an exmaple suite", function() {
it("contains spec with an expectation", function() {
expect(true).toBe(true);
expect(false).toBe(false);
expect(false).not.toBe(true);
});
});
Specs
Specs 通过调用 it 的全局函数来定义。和 describe 类似,it 也是有 2 个参数,字符串和方法。每个 Spec 包含一个或多个 expectations 来测试需要测试代码。
Jasmine 中的每个 expectation 是一个断言,可以是 true 或者 false。当每个 Spec 中的所有 expectations 都是 true,则通过测试。有任何一个 expectation 是 false,则未通过测试。而方法的内容就是测试主体。
JavaScript 的作用域的规则适用,所以在 describe 定义的变量对 Suite 中的任何 it 代码块都是可见的。
describe("Test suite is a function.", function() {
var flag;
it("Spec is a function.", function() {
flag = true;
expect(flag).toBe(true);
});
it("Another spec is a function.", function() {
flag = false;
expect(flag).toBe(false);
});
});
Expectations
Expectations 是由方法 expect 来定义,一个值代表实际值。另外的匹配的方法,代表期望值。
describe("This is an exmaple suite", function() {
it("contains spec with an expectation", function() {
var num = 10;
expect(num).toEqual(10);
});
});
总结
describe 方法用来组织相关的 Spec 集合。string 参数作为 Spec 集合的名字,会和其中的 Spec 连接组成 Spec 的完整名字。这样在一个大的 suite 中可以更容易找到某个 Spec。如果给它们命名适当,Specs 读起来是一个典型的 BDD 样式的句子。
Spec 是作为测试主体,Suite 是一个或多个 Spec 的集合。
describe 和 it 代码块中都是方法,可以包含任何可执行的代码来实现测试。而方法的内容就是 Suites。
Machers
在Jasmine中,每个Matcher实现一个“期望值”和“实际值”的布尔判断,Jasmine会根据Mather判断expectation是true 还是false ,然后决定spec是测试通过还是失败。所有Matcher可以通过not 执行否定判断。
基础matchers
toBe():相当于===比较。
toNotBe()
toBeDefined():检查变量或属性是否已声明且赋值。
toBeUndefined()
toBeNull():是否是null。
toBeTruthy():布尔测试,判断值是否是,或者可以转换为true。
toBeFalsy()
toBeLessThan():数值比较,小于。
toBeGreaterThan():数值比较,大于。
toEqual():相当于==,注意与toBe()的区别。
一个新建的Object不是(not to be)另一个新建的Object,但是它们是相等(to equal)的。
expect({}).not().toBe({});
expect({}).toEqual({});
toNotEqual()
toContain():数组中是否包含元素(值)。只能用于数组,不能用于对象。
toBeCloseTo():是比较两个值是否足够接近(不一定要相等)。
toMatch():按正则表达式匹配。
toNotMatch()
toThrow():检验一个函数是否会抛出一个错误
Setup and Teardown
为了在复杂的测试用例中更加便于组装和拆卸,Jasmine提供了四个函数:
beforeEach(function) //在每一个测试用例(it)执行之前都执行一遍beforeEach函数;
afterEach(function) //在每一个测试用例(it)执行完成之后都执行一遍afterEach函数;
beforeAll(function) //在所有测试用例执行之前执行一遍beforeAll函数;
afterAll(function) //在所有测试用例执行完成之后执行一遍afterAll函数;
基本用法
下面是一个简单测试的栗子:
describe("A suite", function() {
it("contains spec with an expectation", function() {
expect(true).toBe(true);
});
});
- 可以在html页面去运行写的测试
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Jasmine Spec</title>
<link rel="shortcut icon" type="image/png" href="lib/jasmine-2.7.0/jasmine_favicon.png">
<link rel="stylesheet" href="lib/jasmine-2.7.0/jasmine.css">
<script src="lib/jasmine-2.7.0/jasmine.js"></script>
<script src="lib/jasmine-2.7.0/jasmine-html.js"></script>
<script src="lib/jasmine-2.7.0/boot.js"></script>
<!-- include spec files here... -->
<script src="spec/Spec.js"></script>
</head>
<body>
</body>
</html>
其中包括一些依赖包,可以在观网进行下载。
结果是这样的:
也可以安装jasmine依赖使用命令行运行:
安装
cnpm i jasmine --save-dev
运行
jasmine “spec file”
结果:
运行结果推荐链接:Jasmine官方文档