微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

开玩笑 |模拟一个 JavaScript 创建和注入的样式表

如何解决开玩笑 |模拟一个 JavaScript 创建和注入的样式表

我已经使用 JavaScript 成功创建并注入了我的样式表,我的功能没有问题,但我的测试现在没有通过,因为我收到了这个错误 TypeError: Cannot set property 'parentStyleSheet' of undefined .

当我运行测试和 console.log(stylesheet) 时,它确实返回为 null

我什至无法进入测试的第一行,因为我一开始就收到了这个错误。 如果我注释掉我的 insertRule(),则测试通过。

如何模拟此样式表,以便让我的测试再次通过?

我创建样式表的函数

const createStyleSheet = () => {
  this.createdStyleSheet = (function () {
    const style = document.createElement('style');
    style.title = 'carousel';
    style.appendChild(document.createTextNode(''));
    document.head.appendChild(style);
    return style.sheet;
  }());
};

createStyleSheet();

this.createdStyleSheet.insertRule(---stuff inside here---);

解决方法

我这样做是为了模拟 insertRule。如果您只是想阻止它因未定义而失败,这将起作用。如果您确实需要为将来的测试添加样式,那么您可能需要修改它。我只返回 0 以阻止我的打字稿抱怨

window.CSSStyleSheet.prototype.insertRule = function (rule,index) {
    const styleElement = document.createElement("style");
    const textNode = document.createTextNode(rule);
    styleElement.appendChild(textNode);
    document.head.appendChild(styleElement);
    return 0;
};

使用此链接查看需要放置模拟函数的位置
https://jestjs.io/docs/manual-mocks#mocking-methods-which-are-not-implemented-in-jsdom

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。