Sha*_*han 11 javascript unit-testing jestjs
使用Jest编写单元测试时。为什么要使用beforeAll来简单地将值直接分配给全局变量,反之亦然?
例如,以下两个片段之间有什么区别?
片段 1
const mock = { key1: 'val1', key2: 'val2' };
describe('Test Cases', () => {
test('Case 1', () => {
// tests that use mock variable
});
test('Case 2', () => {
// more tests that use mock variable
});
});
Run Code Online (Sandbox Code Playgroud)
片段 2
const mock = {};
beforeAll(() => {
mock.key1 = 'val1';
mock.key2 = 'val2';
});
describe('Test Cases', () => {
test('Case 1', () => {
// tests that use mock variable
});
test('Case 2', () => {
// more tests that use mock variable
});
});
Run Code Online (Sandbox Code Playgroud)
在您的示例中,它没有任何区别。然而,在某些情况下,使用beforeAll 确实有意义:如果您有异步代码,则返回承诺的函数。
如果您从beforeAll回调中返回一个承诺,您可以在测试中轻松测试承诺最终解析为的值。
引用Jest 文档:
在某些情况下,您只需要在文件开头进行一次设置。当设置是异步的时,这会特别麻烦,所以你不能只是内联。Jest 提供了beforeAll和 afterAll 来处理这种情况。例如,如果initializeCityDatabase和clearCityDatabase 都返回了 promise,并且 city 数据库可以在测试之间重用,我们可以将测试代码更改为:
beforeAll(() => {
return initializeCityDatabase();
});
afterAll(() => {
return clearCityDatabase();
});
test('city database has Vienna', () => {
expect(isCity('Vienna')).toBeTruthy();
});
test('city database has San Juan', () => {
expect(isCity('San Juan')).toBeTruthy();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5616 次 |
| 最近记录: |