Jasmine 简介

Flying
2014-12-04 / 0 评论 / 123 阅读 / 正在检测是否收录...

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

jasmin.svg

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

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

类似于 beforeEachafterEach 块在单独的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 匹配器页面了解更多。

7

评论 (0)

取消