Angular学习笔记67:Angular项目的单元测试 -- Jasmine的简单的了解

Jasmine的简单的语法

Distribution

Distribution对应的全局函数是 describe(string,function),可以理解为是一个测试集或者测试包(官方称之为suite),主要功能是用来划分单元测试的,describe接受的两个参数,string是这个测试套件的标题或者描述信息,参数function就是实现这个测试套件。describe是可以嵌套使用的。

Specs

Specs对应全局函数是it(string,function),可以将其列理解为测试用例,it接受的两个参数 string是这个测试用例的标题或者描述信息,参数function是这个测试用例的具体实现。

Expectations

Expectations的对应的全局方法是 expect()断言表达式,expect通过链式 Matcher 方法来比较实际值是否和预期值一致,如果一致就是测试通过,Matchers用于比较期望值和实际值并且可以使用not对期望结果的进行否定。

例如下段代码


describe('describe的标题或者描述信息', function () {
  it('it 的标题或者描述信息 也可以写成 测试用例的标题', function () {
    const a = 12;
    const b = 24;
    expect(a).toBe(b);
    expect(a).not.toBe(null);
  });
});

describe('describe的标题或者描述信息', () => {
  it('it 的标题或者描述信息 也可以写成 测试用例的标题', () => {
    const a = 12;
    const b = 24;
    expect(a).toBe(b);
    expect(a).not.toBe(null);
  });
});

这里的测试案例是不会通过的,因为a = 12 和 b = 24 不相等。

需要注意

  1. 一个测试文件中可以包含多个 describe().
  2. 一个describe()中可以包含多个it().
  3. 一个describe()中包含的多个it()函数的中,it()的string参数不能相同,如果相同,则按照一个it()来计算,并且不会执行第二个it().
  4. 一个it()中可以包含多个 expect().
  5. 一个it()函数中,所有的expect() 都测试通过才算 it() 测试通过

生命钩子

在jasmine中有四个全局方法作为钩子:

  • beforeEach()
  • afterEach()
  • beforeAll()
  • afterAll()

beforeEach() 和 afterEach()

beforeEach()会在describe中的每个it的方法参数的调用前都会执行一次。
afterEach()会在describe中的每个it的方法参数的调用后都会执行一次。

在Angular中使用TestBed进行测试的时候,通常会使用 beforeEach() 来通过调用TestBed.configureTestingModule()动态创建一个用来模拟 @NgModule 的 Angular 测试模块。
如下:

describe('PublicDataService', () => {
  beforeEach(() => {
    TestBed.configureTestingModule({});
  });
});

beforeAll() 和 afterAll()

beforeAll()会在describe中的全部it的方法参数的调用前只执行一次。
afterAll()会在describe中的全部it的方法参数的调用后只执行一次。

this 关键字

可以在beforeEach()和afterEach()的通过this定义属性,this中传递it的this。***注意这里传递值的时候是值传递,***每个it中的this都是相互独立的,改变it中this的属性并不会作用于其他it,也不会影响到beforeEach()和afterEach()中的this。

对于不可用的的测试处理

  • 对于describe()

将describe()替换为xdescribe(),那么整个describe()就会跳过去

  • 对于it()

在it()中使用全局的pending(reson:string)方法;

describe('describe的标题或者描述信息', () => {
  it('it 的标题或者描述信息 也可以写成 测试用例的标题', () => {
    const a = 12;
    const b = 24;
    expect(a).toBe(b);
    expect(a).not.toBe(null);
    pending('未写完,待续');
  });
});

此时这个测试用例就会跳过去。

了解更多,请参见Jasmine官方文档

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值