编程语言
首页 > 编程语言> > javascript – 模拟document.createRange for jest

javascript – 模拟document.createRange for jest

作者:互联网

通过我想象的JSDom,Jest没有定义document.createRange.我该如何覆盖或提供此行为?

我们为自定义JSDom mocha设置编写的版本(在所有测试之前运行)如下所示:

global.Range = function Range() {};

const createContextualFragment = (html) => {
  const div = document.createElement('div');
  div.innerHTML = html;
  return div.children[0]; // so hokey it's not even funny
};

Range.prototype.createContextualFragment = (html) => createContextualFragment(html);

// HACK: Polyfil that allows codemirror to render in a JSDOM env.
global.window.document.createRange = function createRange() {
  return {
    setEnd: () => {},
    setStart: () => {},
    getBoundingClientRect: () => {
      return { right: 0 };
    },
    getClientRects: () => [],
    createContextualFragment,
  };
};

有没有办法提供这个开玩笑?

解决方法:

创建一个脚本来设置你想要的polyfill – 让我们称它为“mockument.js”这个例子.在package.json的jest配置中,将setupFiles设置为指向此脚本:

"jest": {
  "setupFiles": ["raf/polyfill", "./scripts/mockument"]
}

如上所示,您还可以使用模块名称(例如raf / polyfill).

关于这一点的一个好处是,您可以创建自己的模块以进行常见的初始设置以进行测试,并在需要该功能的多个组件库中使用它们.

"jest": {
  "setupFiles": ["@nteract/mockument"]
},

标签:javascript,jestjs,jsdom
来源: https://codeday.me/bug/20190627/1308267.html