测试依赖于这些(笑话)的函数时,如何获取/设置范围外变量?

时间:2019-07-15 09:51:27

标签: javascript unit-testing jestjs babeljs

我正在尝试对项目中的某些辅助功能进行完整的测试。我对这两个函数的第一个测试都检查是否声明了2个范围外变量,它们成功运行。

我想做的是,开玩笑设置/模拟 wrapperlayer声明为函数范围之外的变量进行测试,但无论我多么努力,似乎都无法做到。

感谢并感谢您在这方面提供的任何帮助,因为我在编写测试方面相当菜鸟,更不用说 jest 的测试了。

  1. 我尝试通过默认模拟导入的模块来jest.mock,然后对2个函数进行了jest.requireActual
  2. 我曾尝试过使用jest.doMock模块工厂来设置这两个变量,然后返回一个对象。

模块: helpers / index.js

let wrapper; // Is created on runtime ergo initially undefined.
const layer = document.createElement('div');
layer.classList.add('layer');

const isElement = elm => {
  if (!(elm instanceof Element)) {
    throw new Error('Given element is not of type Element or is undefined!');
  }
}

export const someFn = async () => {
  wrapper = document.querySelector('.wrapper');

  isElement(wrapper);
  isElement(layer);
  
  // Code that needs to be tested
  // but cannot since when testing this function
  // 'wrapper' and 'layer' are always undefined.
}

测试: helpers / index.test.js

// Helpers
import {someFn} from 'helpers';

describe('Method: someFn', () => {
  test('should NOT throw', async () => {
      await expect(someFn()).resolves.not.toThrow(); // but it does!
  });
});

实际结果Received promise rejected instead of resolved

预期结果:考虑到该函数所依赖的这些范围外变量,可以在测试时以某种方式设置/模拟它。

0 个答案:

没有答案