在玩笑测试用例中转换变量时会被提升吗?

will it be hoisted when a variable is transformed in jest test case?

我正在开发和测试 Array.isArray 模块。

isArray 模块

export isArray function (arg) {
  if (Array.isArray) {
    return Array.isArray(arg);
  }
  return Object.prototype.toString.call(arg) === '[object Array]';
}

isArray TC

describe('isArray test', () => {
  describe('[native] test', () => {
    test('[] => true', () => {expect(isArray([])).toBe(true); });
  });

  describe('[native not exist] test', () => {
    delete Array.isArray;
    test('[] => true', () => {expect(isArray([])).toBe(true); });
  });
});
     

删除Array.isArray阶段似乎正在吊装。 所以,所有 TC 都不是 isArray 模块的原生。 描述相位在 TC 中提升? 请问mw怎样才​​能不影响delete phase

“提升”在这里不是正确的术语 – 您只是删除全局 属性 而没有将其重置为原始值,并且这将在测试用例之间持续存在。

最简单的修复方法是手动重置对象:

describe("[native not exist] test", () => {
  test("[] => true", () => {
    const originalIsArray = Array.isArray;  // Grab original function
    delete Array.isArray;  // Remove it
    expect(isArray([])).toBe(true);  // Test
    Array.isArray = originalIsArray;  // Undo the removal
  });
});