简体   繁体   English

酶,测试一个使用useContext hook的react组件?

[英]Enzyme, test a react component that uses useContext hook with shallow?

在此处输入图像描述

How do I test my component that uses jest and Enzyme with shallow and a react component that uses useContext hook.如何测试使用 jest 和 Enzyme 的组件以及使用 useContext 钩子的 react 组件。

How do I mock "pValue.state.fullLang"?如何模拟“pValue.state.fullLang”?

src\LanguageSelect.tsx src\LanguageSelect.tsx

 import React, { useContext } from 'react'; import { LanguageContext } from './utils/LanguageHook'; function LanguageSelect() { const pValue: any = useContext(LanguageContext); return ( <div className="LanguageSelect" data-test="languageSelect-box"> <div className="languageArea">{pValue.state.fullLang}</div> </div> ); } export default LanguageSelect;

src\LanguageSelect.test.tsx src\LanguageSelect.test.tsx

 import React from 'react'; import { shallow } from 'enzyme'; import LanguageSelect from './LanguageSelect'; test.only('that the LanguageSelect component exists', () => { jest.mock('react', () => { const ActualReact = require.requireActual('react'); return {...ActualReact, useContext: () => ({ state: { fullLang: 'mocked context' } }), }; }); const wrapper = shallow(<LanguageSelect />) expect(wrapper.find('[data-test="languageSelect-box"]').exists()).toBeTruthy() wrapper.unmount(); })

If you are testing that component in isolation then you can mock useContext like this:如果您正在单独测试该组件,那么您可以像这样模拟useContext

jest.mock('react', () => {
    const ActualReact = require.requireActual('react');
    return {
      ...ActualReact,
      useContext: () => ({ state: { fullLang: 'mocked context' } }),
  };
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM