javascript - 使用 JSDOM 加载需要 DOM 的测试模块
问题描述
我正在尝试使用 JSDOM 测试文件的功能。
我已经导入它并创建了一个新的 JSDOM 类,但是每次我去运行它时,各种选择器都返回 null。这是因为模块在加载时会尝试查找元素,但此时 JSDOM 不存在。
有没有办法加载模块,以便它看到窗口和文档的 JSDOM 模拟,同时仍然可以访问被调用?
测试文件:
import { JSDOM } from 'jest';
import { myFunction } from './myFile';
const dom = new JSDOM(`<someDOMStructure`);
const { window } = dom;
global.window = window;
global.document = window.document;
it('does something', () => {
const results = myFunction('input'); //
expect(results).toEqual('expected');
});
要测试的文件:
const element = document.getElementById('id'); // needs to be outside exported function
export function myFunction(input) {
element.classList.add(input); // element is null because JSDOM didn't exist when it was called, so this errors
return 'expected'
}
解决方案
推荐阅读
- sql - 使用 sysdate 时如何在查询中搜索日期
- r - 确定点位于哪个多边形中
- anaconda - 无法在 Jupyter Notebook 上安装 fastai
- javascript - stripe - 不能对新的 paymentIntents 使用相同的支付方式
- java - 为什么在这个 Trie 算法中 C++ 比 Java 慢很多?
- python - 基于索引列表组合/求和 numy 数组的行
- excel - 如何在Excel中的单个单元格中获取学生状态为通过或失败的数字列表
- python - 如何让输入框检测字母并发出警告说“仅限数字”
- android - 如何在不覆盖正常行为的情况下为 AutocompleteSupportFragment 设置 onClickListener
- javascript - 我可以减少这个javascript吗?(多个图像数组并单击事件侦听器)