angular2单元测试 - jasmine语法 - 1

1、套件(suites) (describe 套件):描述测试内容

代码示例:

describe("A suite", function() {
  it("contains spec with an expectation", function() {
    expect(true).toBe(true);
  });
});

示例代码讲解:

describe() 用于对相关规范内容进行分组,通常每个测试文件的顶层都会有一个 describe 方法。

方法参数:

  参数一:字符串,该字符串用于命名当前测试模块(套件)。

  参数二:方法,方法内部可编写测试代码,可执行一个或多个 it() 。

it() (spec规范) 是 jasmine 全局函数,跟 describe() 函数一样,接收两个参数,

参数:

  参数一:字符串,用于命名当前规范 (spec) 的标题

  参数二:方法,可包含一个或多个测试代码状态的期望 (expect) 。

expect 期望是一个非真即假的断言。

  expect() 接收一个需要验证的实际值,后连接一个匹配函数 (此例中的 .toBe()) ,匹配函数接收要进行对比的期望值。

  如果实际值与期望值匹配成功,则ecpect执行测试成功,匹配失败,即测试执行失败。

代码示例:

describe("A suit", function(){
  it("can have a negative case", function() {
    expect(false).not.toBe(true);
  });
});

示例代码讲解:

  expect 断言的任意匹配函数 (matcher) 前都可以使用 .not 来进行匹配函数中期望值的相反值进行比较。

 

2、describe() 和it() 函数,代码作用域适用于javascript代码作用域规则。

代码示例:

describe("A suite is just a function", function() {
  var a;

  it("and so is a spec", function() {
    a = true;

    expect(a).toBe(true);
  });
});

示例代码讲解:

describe() 和 it() 函数块,可以编写为实现测试所需要的任何可执行代码(作用域适用于js代码作用域规则)。

故,describe中定义的变量,可在it中使用,且依据代码流执行,依次执行。

 

3、为了帮助测试套件消除重复的设置,和销毁不需要的变量,Jasmine 提供了 beforeEach()、afterEach()、beforeAll()、afterAll() 四个函数。

代码示例:

describe("A suite with some shared setup", function() {
    var foo = 0;
    beforeEach(function() {
        foo += 1;
    });
    afterEach(function() {
        foo = 0;
    });
    beforeAll(function() {
        foo = 1;
    });
    afterAll(function() {
        foo = 0;
    });
});

示例代码讲解:

beforeEach:在调用它的套件中的每个 it()  执行前执行一次。

afterEach:在调用它的套件中的每个 it() 执行后执行一次。

beforeAll:在调用它的套件中的所有 it() 执行前执行一次。

afterAll:在调用它的套件中所有 it() 执行后执行一次。

4、在beforeEach、it、afterEach 之间共享变量的方法

方法一:通过在 describe 中定义变量,beforeEach、it、afterEach 之间可公用此变量

方法二:通过 this 关键字,每个 describe 中,beforeEach、it、afterEach 之间公用this对象,即在 beforeEach 中设置 this.a = 0 ,在 it 中可获取 this.a 值为0。

但是在 it 中,变量不共享。

代码示例:

describe("A spec", function() {
  beforeEach(function() {
    this.foo = 0;
  });

  it("can use the `this` to share state", function() {
    expect(this.foo).toEqual(0);
    this.bar = "test pollution?";
  });

  it("prevents test pollution by having an empty `this` created for the next spec", function() {
    expect(this.foo).toEqual(0);
    expect(this.bar).toBe(undefined);
  });
});

 

5、fail() 函数

代码示例:

describe("A spec using the fail function", function() {
  var foo = function(x, callBack) {
    if (x) {
      callBack();
    }
  };

  it("should not call the callBack", function() {
    foo(false, function() {
      fail("Callback has been called");
    });
  });
});

示例代码讲解:

fail 函数,会导致spec失败,

方法参数:失败消息或者错误对象。

 

6、describe() 嵌套

代码示例:

describe("A spec", function() {
  var foo;

  beforeEach(function() {
    foo = 0;
    foo += 1;
  });

  afterEach(function() {
    foo = 0;
  });

  it("is just a function, so it can contain any code", function() {
    expect(foo).toEqual(1);
  });

  it("can have more than one expectation", function() {
    expect(foo).toEqual(1);
    expect(true).toEqual(true);
  });

  describe("nested inside a second describe", function() {
    var bar;

    beforeEach(function() {
      bar = 1;
    });

    it("can reference both scopes as needed", function() {
      expect(foo).toEqual(bar);
    });
  });
});

示例代码讲解:

describe() 可以嵌套,在任何级别都可定义 describe() ,即允许将 describe 组成函数树。

在执行一个 it()  (spec 规范)之前,jasmine按顺序执行每一个 beforeEach 函数。

在执行 it()  (spec 规范)之后,jasmine以类似的方式执行 afterEach 函数。

 

7、禁用套件 (disabling suites)

代码示例:

xdescribe("A spec", function() {
  var foo;

  beforeEach(function() {
    foo = 0;
    foo += 1;
  });

  it("is just a function, so it can contain any code", function() {
    expect(foo).toEqual(1);
  });
});

 示例代码讲解:

xdescribe 函数,设置为禁用套件。

禁用套件为其中的任何 it  (spec 规范) 在运行时将被跳过,因此它们的结果将显示为挂起。

8、挂起 it ( spec 规范)

代码示例:

describe("Pending specs",function() {
    xit("can be declared 'xit'", function() {
        expect(true).toBe(false);
    });
    it("没有函数体声明的 it ( spec 规范),也将在结果中被标记为挂起。");
    it("can be declared by calling 'pending' in the spec body", function() {
        expect(true).toBe(false);
        pending('this is why it is pending');
    });
});

 

示例代码讲解:

挂起的 it ( spec 规范),即 xit  不会执行,但是他们的名字将会以挂起状态出现在结果中。

没有函数体声明的 it ( spec 规范),也将在结果中被标记为挂起。

如果在 it ( spec 规范)中的任何地方调用 pending ,不管 expend 断言了什么,该 it ( spec 规范 ) 都将被标记为挂起,pending() 中传入的字符串 (string) 被视为原因显示

 

posted @ 2020-04-23 13:56  冰凝^  阅读(314)  评论(0编辑  收藏  举报