为什么我们不应该只用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
...
});