Javascript 在React中使用DOM操作库进行测试
我使用了一个库OpenSheetMusikDisplay和React,它可以在DOM的目标下动态添加一些元素。我使用div的ref作为目标元素,这很好。我自己需要根据库的状态向DOM添加额外的元素。基本上,我用一些div覆盖渲染表,这些div需要是库添加的元素之一的子元素,以便正确定位 我想用酶来测试这个组件,但找到覆盖的唯一包装器是Cheerio,据我所知,它不支持触发输入事件。覆盖层是要点击的,所以我需要对这种行为进行测试Javascript 在React中使用DOM操作库进行测试,javascript,reactjs,enzyme,Javascript,Reactjs,Enzyme,我使用了一个库OpenSheetMusikDisplay和React,它可以在DOM的目标下动态添加一些元素。我使用div的ref作为目标元素,这很好。我自己需要根据库的状态向DOM添加额外的元素。基本上,我用一些div覆盖渲染表,这些div需要是库添加的元素之一的子元素,以便正确定位 我想用酶来测试这个组件,但找到覆盖的唯一包装器是Cheerio,据我所知,它不支持触发输入事件。覆盖层是要点击的,所以我需要对这种行为进行测试 我的问题是,是否有另一种方法来测试动态添加元素的事件处理,或者是否有
我的问题是,是否有另一种方法来测试动态添加元素的事件处理,或者是否有更像React的方法来处理直接操作DOM的后处理库?我通过直接使用DOM Api解决了这个问题
import React from 'react';
import enzyme from 'enzyme';
import Adapter from 'enzyme-adapter-react-16';
enzyme.configure({ adapter: new Adapter() });
function doSomeDomManipulation(element: Element) {
const child = document.createElement('div');
child.classList.add("some-class");
element.appendChild(child);
}
class Foo extends React.Component<{}, {}>{
divRef: React.RefObject<HTMLDivElement>;
constructor(props: {}) {
super(props);
this.divRef = React.createRef()
}
render() {
return <div ref={this.divRef}></div>;
}
componentDidMount() {
doSomeDomManipulation(this.divRef.current!);
}
}
describe("Foo", () => {
const root = document.createElement('div');
const wrapper = enzyme.mount(<Foo/>, {
attachTo: root
});
it('has a div with class "some-class"', () => {
const length = root.querySelectorAll("some-class").length;
expect(length).toBe(1);
});
});
从“React”导入React;
从“酶”进口酶;
从'enzyme-Adapter-react-16'导入适配器;
configure({adapter:newadapter()});
函数doSomeDomManipulation(元素:元素){
const child=document.createElement('div');
添加(“某个类”);
元素。追加子元素(子元素);
}
类Foo扩展了React.Component{
divRef:React.reObject;
构造函数(props:{}){
超级(道具);
this.divRef=React.createRef()
}
render(){
返回;
}
componentDidMount(){
doSomeDomManipulation(this.divRef.current!);
}
}
描述(“Foo”,()=>{
const root=document.createElement('div');
常量包装器=酶的装载量({
附件:根
});
它('有一个类为“some class”的div',()=>{
const length=root.querySelectorAll(“某个类”).length;
期望(长度)toBe(1);
});
});