我知道在测试之间共享状态是不好的做法,如果可能的话应该避免。但我只是好奇下面这两个结构在 Jest 中有何不同:
描述块
describe('test suite', () => {
const theAnswer = 42;
test('a test case', () => {
expect(theAnswer + 1).toEqual(43);
});
test('another test case', () => {
expect(theAnswer + -1).toEqual(41);
});
});
Run Code Online (Sandbox Code Playgroud)
与
全部之前
describe('test suite with beforeAll', () => {
let theAnswer;
beforeAll(() => {
theAnswer = 42;
});
test('a test case', () => {
expect(theAnswer + 1).toEqual(43);
});
test('another test case', () => {
expect(theAnswer + -1).toEqual(41);
});
});
Run Code Online (Sandbox Code Playgroud)
beforeAll如果我们可以直接在块中声明共享变量/状态,那么使用的意义是什么describe?
来自文档一次性设置:
当设置是异步的时,这可能特别麻烦,因此您无法内联执行此操作。Jest 提供了
beforeAll处理afterAll这种情况的方法。
如果设置像您一样是同步的,则在块中声明变量describe就可以了。
如果安装是同步的,则无需
beforeAll. 关键是 Jest 将等待承诺解决,因此您也可以进行异步设置。
但如果设置是异步的,则无法在describe块内进行。before*你必须用钩子来做after*。
例如
describe('test suite', () => {
let theAnswer;
beforeAll((done) => {
setTimeout(() => {
theAnswer = 42;
done();
}, 1_000);
});
test('a test case', () => {
expect(theAnswer + 1).toEqual(43);
});
test('another test case', () => {
expect(theAnswer + -1).toEqual(41);
});
});
Run Code Online (Sandbox Code Playgroud)
Jest 将等待设置完成后再运行测试用例。
| 归档时间: |
|
| 查看次数: |
3180 次 |
| 最近记录: |