首页 > 语言 > JavaScript > 正文

利用Jasmine对Angular进行单元测试的方法详解

2024-05-06 15:16:02
字体:
来源:转载
供稿:网友

前言

本文主要介绍的是关于利用Jasmine对Angular单元测试的相关内容,以下是我假定那些极少或压根没写单元测试的人准备的,因此,会白话解释诸多概念性问题,同时会结合 Jasmine 与之对应的方法进行讲解。

一、概念

Test Suite

测试套件,哪怕一个简单的类,也会有若干的测试用例,因此将这些测试用例集合在一个分类下就叫Test Suite。

而在 Jasmine 就是使用 describe 全局函数来表示,它的第一个字符串参数用来表示Suite的名称或标题,第二个方法参数就是实现Suite代码了。

describe('test suite name', () => {});

Specs

一个Specs相当于一个测试用例,也就是我们实现测试具体代码体。

Jasmine 就是使用 it 全局函数来表示,和 describe 类似,字符串和方法两个参数。

而每个 Spec 内包括多个 expectation 来测试需要测试的代码,只要任何一个 expectation 结果为 false 就表示该测试用例为失败状态。

describe('demo test', () => { const VALUE = true; it('should be true', () => {  expect(VALUE).toBe(VALUE); })});

Expectations

断言,使用 expect 全局函数来表示,只接收一个代表要测试的实际值,并且需要与 Matcher 代表期望值。

二、常用方法

Matchers

断言匹配操作,在实际值与期望值之间进行比较,并将结果通知Jasmine,最终Jasmine会判断此 Spec 成功还是失败。

Jasmine 提供非常丰富的API,一些常用的Matchers:

toBe() 等同 === toNotBe() 等同 !== toBeDefined() 等同 !== undefined toBeUndefined() 等同 === undefined toBeNull() 等同 === null toBeTruthy() 等同 !!obj toBeFalsy() 等同 !obj toBeLessThan() 等同 < toBeGreaterThan() 等同 > toEqual() 相当于 == toNotEqual() 相当于 != toContain() 相当于 indexOf toBeCloseTo() 数值比较时定义精度,先四舍五入后再比较。 toHaveBeenCalled() 检查function是否被调用过 toHaveBeenCalledWith() 检查传入参数是否被作为参数调用过 toMatch() 等同 new RegExp().test() toNotMatch() 等同 !new RegExp().test() toThrow() 检查function是否会抛出一个错误

而这些API之前用 not 来表示负值的判断。

expect(true).not.toBe(false);

这些Matchers几乎可以满足我们日常需求,当然你也可以定制自己的Matcher来实现特殊需求。

Setup 与 Teardown

一份干将的测试代码很重要,因此我们可以将这些重复的 setup 与 teardown 代码,放在与之相对应的 beforeEach 与 afterEach 全局函数里面。

beforeEach 表示每个 Spec 执行之前,反之。

describe('demo test', () => { let val: number = 0; beforeEach(() => {  val = 1; }); it('should be true', () => {  expect(val).toBe(1); }); it('should be false', () => {  expect(val).not.toBe(0); });});            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选