在Jasmine中,beforeAll()的目的是什么?

时间:2017-05-18 21:14:29

标签: javascript ecmascript-6 jasmine

为什么我们不应该将beforeAll(function(){ let foo = 'test' })替换为let foo = 'test'?如果第二种方式没问题,那么beforeAll的目的是什么?

顺便说一句,这里是官方定义:在任何beforeEach函数或任何规范之前,beforeAll函数只对包含它的describe块执行一次。

1 个答案:

答案 0 :(得分:6)

beforeAll函数范围内,describe块和普通代码之间存在一些实质性差异。

beforeAll设置应与afterAll拆卸相结合。

before*块中的错误并不重要,并且不会阻止填充规范列表并运行规范。 describe块中的错误将导致空的规格列表。

before*it块具有this as the context of current spec,可用作在块之间共享数据的推荐方式。它通常比父范围的普通变量更可取,因为这样就没有交叉污染测试的风险。 describe函数没有此上下文。但是,这种方法与ES6箭头功能不兼容。

可能有Jasmine助手可以与before*it块一起使用,例如在角度测试中:

beforeAll(fakeAsync(() => {
  asyncInitializationThatDoesntNeedDoneCallback();
}));

如果它是一个应该为整个块定义的常量,那么它肯定可以在没有beforeAll的情况下定义:

describe('...', () => {
  const foo = 'test'; // not let
  ...
});