当前位置: 首页 > 知识库问答 >
问题:

如何解决Jest测试用例中的“TypeError:无法将属性'innerHTML'设置为null”?

韦思淼
2023-03-14

我本来打算测试我所有的函数,但我遇到了一个错误。当我在mysecondap中运行测试时。测验js文件我得到这样一个错误:(但是程序没有测试就可以工作)

PS E:\Programming\FP\FP_Practice\practice-1> jest
 FAIL  src/components/MySecondApp/MySecondApp.test.js
  ● Test suite failed to run

    TypeError: Cannot set property 'innerHTML' of null

      38 |
      39 | const append = curry((elementId, info) => {
    > 40 |     document.querySelector(elementId).innerHTML = info.orElse(errorLog
);
         |     ^
      41 |     return info;
      42 | });
      43 |

      at src/components/MySecondApp/MySecondApp.jsx:40:5
      at node_modules/ramda/src/internal/_curryN.js:46:27
      at fn (node_modules/ramda/src/internal/_arity.js:11:19)
      at IO.effect (src/monads/IO/IO.js:22:20)
      at IO.run (src/monads/IO/IO.html" target="_blank">js:31:21)
      at Object.<anonymous> (src/components/MySecondApp/MySecondApp.jsx:58:30)
      at Object.<anonymous> (src/components/MySecondApp/MySecondApp.test.js:1:1)

这是MySecondap。测验我运行的js文件:

import {cleanInput} from "./MySecondApp";

describe("showMyStudent", () => {
    it("returns clean input", () => {
        expect(1 + 5).toBe(6)
        expect(cleanInput(' 444-44-4444 ')).toBe('444-44-4444')
    })
})

和功能,我试图测试:

const trim = (str) => str.replace(/^\s*|\s*$/g, '');
const normalize = (str) => str.replace(/-/g, '-');
export const cleanInput = compose(normalize, trim);

我不知道怎么了。请帮助我处理这个错误,并理解为什么它会以这种方式发生。github:https://github.com/AlexKor-5/FP_Practice/tree/b035e1f864abb9056a68fbf1385731e9cf3c05a3Commit的调用类似于“Updated!TypeError:无法将属性'innerHTML'设置为null”。非常感谢您的帮助!

共有1个答案

谭修竹
2023-03-14

根据你的密码

https://github.com/AlexKor-5/FP_Practice/blob/b035e1f864abb9056a68fbf1385731e9cf3c05a3/src/components/MySecondApp/MySecondApp.jsx

特别是第58行

showMyStudent('444-44-4444').run()

您正在运行上面的函数,因此,第40行

document.querySelector(elementId).innerHTML = info.orElse(errorLog);

现在,在Jest上下文中,在这种情况下,根据您的错误,querySelector将返回null。至少您应该注释第58行,因为似乎是为了在开发过程中对您进行快速测试,那么,作为一般规则,您应该避免在React应用程序中直接操作DOM(我指的是querySelectorinnerHTML)。我不认为这个答案是解释我最后一个建议的意思的正确地方,所以,让我把一个链接作为快速参考(你可以找到很多关于这个话题的文章)。

https://stackoverflow.com/a/59880366/8534482

 类似资料:
  • 问题内容: 为什么会出现错误或未捕获的TypeError:无法将属性’innerHTML’设置为null?我以为我了解innerHTML并在以前使用过。 问题答案: 您必须将div放在脚本之前,以便在加载脚本时该div存在。

  • 我有一个简单的html页面,在body标记中没有代码。我想通过JavaScript在body标记中插入html。 我的javascript文件如下所示。 现在我想要这个很长的html代码在页面加载时自动插入到body标记中。但它给了我我在标题中提到的错误。为什么? 而且这也是创建基于ajax的网站的正确方法吗(不重新加载页面),这意味着如果我调用服务器端脚本来更新这个很长的html代码并将其附加到

  • 我正在创建一个HTML页面,它是使用bootstrap构建的。下面是hello.js文件的最终HTML代码和代码: null null 当我使用submit(提交)按钮而不是alert(报警)单击按钮时,我得到的是错误 未捕获的TypeError:无法设置null的属性“onClick” 有谁能告诉我为什么我要面对这个错误吗??帮助解决它。

  • 有一个错误,其中登录的用户将尝试更新他们的帐户用户名,但遇到一个错误。在我的一生中,我无法弄清楚为什么有时(可能有1/20的用户遇到这种情况)找不到当前的用户。只有登录后,用户才能访问此页面。错误有: 投掷;//未处理的“错误”事件 TypeError:无法设置null的属性“username” 错误似乎发生在这里:user.username=req.body.username;

  • 我是骆驼的新手,我被困在一个似乎很简单的问题上。我需要解组交换中的2个XML,然后将相应的POJO传递给处理器。我在考虑是否可以取消整理一个xml,将其设置为一个属性作为交换,并对另一个xml重复相同的属性。最后,在处理器中,我将检索属性,并可以在处理器中执行所需的逻辑。我能够成功地解组XML的,并获得exchange.in.body中的最后一个POJO。但是有人能告诉我在exchange属性中设