Jasmine简介

在上一节中,我们讲解了测试运行器,我们将用它来运行AngularJS写的单元测试。但本书实现这个目标的测试框架实际上是Jasmine。Jasmine框架使用所谓的行为驱动风格编写测试。

也就是说不用写一大堆功能和断言,我们描述行为并设定预期。这是如何转化为实际测试的呢?让我们更深入了解一下。

Jasmine语法

之前我们跳过Jasmine语法而谈论各种Jasmine测试概念,让我们用一个例子来更加清楚地认识:

// 一个简单的Jasmine测试套件
describe('My Function', function() {
  var t;
  // 类似新建
  beforeEach(function() {
    t = true;
  });
  afterEach(function() {
    t = null;
  });
  it('should perform action 1', function() {
    expect(t).toBeTruthy();
  });
  it('should perform action 2', function() {
    var expectedValue = true;
    expect(t).toEqual(expectedValue);
  });
});

让我们逐段分析这个例子:

describe

我们的测试的第一行创建一个测试套件。您可以把它看作多个单元测试的容器,为控制器、服务等编写描述。如果您想要描述控制器复杂函数,可以在描述中嵌套描述,

beforeEach

beforeEach类似于xUnit测试模式下设置功能。也就是说,传递给beforeEach的函数将在每单独的it块之前执行。在本实例中,t = true该行将在描述中每个it块之前执行一次。还可以在描述中有多个beforeEach函数,每个函数会按声明顺序执行一次。

afterEach

类似于beforeEach,afterEach块在单独的it块完成后再执行。如果你使用模拟库,这是最好检查任何模拟预期是否满意的地方。

it

此处放置单元测试。每个it块应是完备并独立于其他it块的。在it块中,基本上都会设置状态、执行函数,检查它的返回值,确保满足所有预期。

expect

相当于Jasmine断言语句,您可以使用一个内置的匹配器(或创建自己的)来检查每个预期值。在前面的示例中,我们使用Jasmine匹配器toBeTruthy,它的值应该匹配JavaScript真值(null,非空的字符串,非零数字,或布尔真的)。第二个it块,我们使用了toEqual匹配器,需要另一个值与第一个值比较看是否相等。

有用的Jasmine匹配器

让我们快速浏览一些基本内置的在测试中常用的Jasmine匹配器。它们都同expect一起使用。那就是expect(value).myMatcherHere:

toEqual

最基本的Jasmine匹配器,toEqual需要第二个值并对两个对象作深度相等检查。如果是对象所有的字段必须匹配。如果是数组,数组的所有元素必须匹配。

toBe

toBe匹配器检查参考,预期传给预期的项和匹配器有完全相同的对象引用。

toBeTruthy

检查传递到匹配器的值是否是JavaScript真值。非null对象,非空的字符串、非零数字、所有布尔true都看作JavaScript真值。

toBeFalsy

检查传递到匹配器的值是否是JavaScript假值。Null值、未定义的变量、空字符串、零,所有布尔false都看作JavaScript假值。

toBeDefined

确保传递到预期的引用否定义(分配一个参考值)过的。

toBeUndefined

检查传递到预期的引用用否未定义或未设置。

toBeNull

检查传递到预期的引用是否null。

toContain

检查传递到预期的数组是否包含传递给匹配器的元素。

toMatch

用于正则表达式检查预期时,第一个参数是一个字符串需要匹配一个特定的正则表达式规则。

在这本书中我们将使用这些匹配器中的一些或所有。 当然,Jasmine是可扩展的,它允许您编写自己的自定义匹配器。你可以阅读Jasmine匹配器页面了解更多。

不完全译自《AngularJS-Up and Running》。

发表评论