茉莉花之前所有受兄弟姐妹影响的描述

时间:2015-12-29 08:22:43

标签: javascript unit-testing jasmine

我的印象是beforeAll - 函数会在其内部描述中运行一次。但是,兄弟姐妹描述的似乎可以影响beforeAll

可以找到以下测试here

describe("outer Describe", function(){
    var testArray;
    beforeEach(function(){
      testArray = [];
    });
    describe("First Describe", function(){
      beforeEach(function(){
        testArray.push({name: "foo"});
      });

      it("has an item", function(){
        expect(testArray.length).toBe(1);//passing
      });
    });

    describe("Second describe", function(){
      var arrIsEmptyInBeforeAll;
      var arrIsEmptyInBeforeEach;
      beforeAll(function(){
        arrIsEmptyInBeforeAll = testArray.length === 0;
        console.log("testArray should be empty:");
        console.log(testArray);//logs array with one item
      });

      beforeEach(function(){
        arrIsEmptyInBeforeEach = testArray.length === 0;
      });

      it("the arr was empty in before all", function(){
        expect(arrIsEmptyInBeforeAll).toBeTruthy(); //This is failing
      });

      it("the arr was empty in beforeEach", function(){
        expect(arrIsEmptyInBeforeEach).toBeTruthy();//Passing
      })
    })
  });

我希望“Second Describe”中的beforeAll有一个空的testArray,因为“外部描述”有一个beforeEach,它将其初始化为一个空数组。但是,在“第二次描述”的beforeAll中,testArray在“首先描述”的beforeEach中添加了一个项目。

这有意义吗?如果是这样,有人可以解释之前应该如何工作。

1 个答案:

答案 0 :(得分:2)

注意:您的代码中存在拼写错误;)..但这不是问题。

expect(arrIsEmptyInBeforeAll).toBeTruthy();

简短回答

在Jasmine的 beforeEach 之前总是调用

之前的所有,即使有外部 beforeEach 语句。

您的测试按以下方式执行:

(外部测试的迭代)

  1. 之前的外部称为 - >数组为空
  2. "首先描述" beforeEach被称为 - >数组变为长度= 1
  3. (内部测试的迭代)

    1. "第二个描述" beforeAll被称为 - > arrIsEmptyInBeforeAll为false,因为数组仍然设置了一个项目
    2. 之前的外部称为 - >数组为空
    3. "第二个描述" beforeEach被称为 - > arrIsEmptyInBeforeEach为true,因为数组已清除
    4. arrIsEmptyInBefore测试中的所有内容均为false