我已经尝试过这样思考,阅读SO问题并且我已经创建了一个小测试:
describe("let", () => {
let x = 1;
it("",function() {
console.log(x + "<< it");
console.log(y + "<< it");
});
});
describe("beforeAll()", () => {
let x;
let y = 2;
beforeAll(() => {
x = 1;
});
it("",function() {
console.log(x + "<< it");
console.log(y + "<< it");
});
});
输出如下:
LOG: '1<< it'
LOG: 'undefined<< it'
LOG: '1<< it'
LOG: '2<< it'
这对我来说意味着beforeAll()和let都是作用于包含函数的范围,并且在运行任何包含的it
之前运行。使用let
(实际上var
)我对JavaScript范围的理解使得结果涉及到预期。
这不会发生在RSpec中,其中y
将在第一次测试中定义,因为描述是在it
之外运行的。 (这是我要问的主要原因,我希望尽可能清理不必要的代码,因为let
更清洁,而不是让RSpec宿醉导致不必要的冗长。)
那么beforeAll()
和let
之间是否存在任何我不知道的差异(我的测试/理解中的缺陷可能会混淆)?
答案 0 :(得分:1)
beforeAll
回调可以访问规范this
,并且可以是异步的。
如果规范中未使用this
上下文,我建议您使用let
/ const
表示常量,beforeAll
表示设置操作(可以是可选择与afterAll
配对。