在我的useEffect
钩子中,初始化一个Leaflet映射。一切正常。但是在测试中,它显示“未找到地图容器”。为了确认我尝试了console.log(document.getElementById('mapid'))
。它在我运行我的应用程序时找到元素,但在测试中却找不到。当我尝试在useEffect
中访问DOM时,它似乎尚未呈现。
这是我的useEffect代码:
useEffect(() => {
console.log(document.getElementById('mapid'))
map.current = Leaflet.map('mapid').setView([46.378333, 13.836667], 12)
}, [])
这是根据测试:
describe('initialise map', () => {
it('render map', () => {
const MapComponent = () => <Provider store={store}><Map /></Provider>
const component = mount(<MapComponent />)
expect.some.really.unexpected.things
})
})
测试时如何在useEffect
中访问DOM?
答案 0 :(得分:0)
我最终没有检查DOM,而是检查了在useEffect中调度的Redux动作:
it('should initialise map without markers', () => {
const MapComponent = () => <Provider store={store}><Map /></Provider>
mount(<MapComponent />)
const [{type: actionType}] = store.getActions()
expect(actionType).toEqual('ADD_MAP')
})
我无法访问测试中的引用。我认为这是因为实际的Map
组件包装在Provider
的内部,因此我无法在已安装的组件上访问Map
的引用。