为什么我们不应该只用beforeAll(function(){ let foo = 'test' })替换let foo = 'test'?如果第二种方法还可以,beforeAll的目的是什么?

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

最佳答案

beforeAll函数的范围内,describe块与普通代码之间存在一些实质性差异。
beforeAll设置应该与afterAll拆卸一起使用。
before*块中的错误并不严重,不会阻止填充规范列表和运行规范。 describe块中的错误将导致规格列表为空。
before*it块具有 this as the context of current spec,可以用作推荐的在块之间共享数据的方式。通常,它比父级作用域中的普通变量更可取,因为这样就不会产生交叉污染测试的风险。 describe函数没有此上下文。但是,此方法与ES6箭头功能不兼容。

可能有Jasmine帮助程序应该与before*it块结合使用,例如在Angular测试中:

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

如果它是应该为整个块定义的常量,那么可以肯定地在不使用beforeAll的情况下进行定义:
describe('...', () => {
  const foo = 'test'; // not let
  ...
});

09-25 18:41