首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Jest/Enzyme覆盖自定义钩子中的回调参数

用Jest/Enzyme覆盖自定义钩子中的回调参数
EN

Stack Overflow用户
提问于 2021-05-11 19:02:42
回答 1查看 241关注 0票数 0

我有一个想要测试的功能组件,我使用scroll position钩子(plugin @n8tb1t/ use -scroll-position)通过传递回调参数来获取Y。但是我发现我的测试没有覆盖滚动位置钩子的回调。

代码语言:javascript
复制
import { useState } from 'react';
import { useScrollPosition } from '@n8tb1t/use-scroll-position';

const Scroll = (): JSX.Element => {
    const [y, setY] = useState(0);

    useScrollPosition(({ currPos }): void => {
        setY(Math.abs(currPos.y));
    });

    return (
        <>
            <style jsx global>{`
                .parent {
                    position: relative;
                }

                .y {
                    position: fixed;
                    top: 1em;
                    right: 1em;
                    background-color: #fff;
                    padding: 2em;
                    border: 5px solid #000;
                }

                .p {
                    height: 1500px;
                    padding: 2em;
                }
            `}</style>
            <div id="parent" className="parent">
                <b className="y">Y {y}px</b>
                <p className="p">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Nostrum molestias architecto quam assumenda error enim ab quia animi placeat dolor.</p>
            </div>
        </>
    )
}

export default Scroll;

这是我的组件的覆盖结果:

我是测试新手,我不知道该怎么说。据我所知,我不能窥探它,因为这个函数是私有的。我尝试了模拟实现,没有任何改变!

这是我制作的测试文件:

代码语言:javascript
复制
import { shallow } from 'enzyme';
import React from 'react';
import Scroll from '@src/pages/scroll';
import { waitForComponentToPaint } from '@src/__mocks__/act';

afterEach(() => {
    jest.clearAllMocks();
});

describe('Scroll Component', () => {
    it('Should render without throwing an error', async () => {
        const wrap = shallow(<Scroll />);
        await waitForComponentToPaint(wrap);

        expect(wrap.find('#parent')).toBeDefined();
    });
});

在我的项目中,我使用Next.js作为框架

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-09 17:07:12

为了覆盖自定义钩子的回调参数,您只需要通过实现如下函数来配置一个mock:

代码语言:javascript
复制
jest.mock('@n8tb1t/use-scroll-position', () => ({
    ...jest.requireActual('@n8tb1t/use-scroll-position'),
    useScrollPosition: jest.fn()
        .mockImplementationOnce((cb) => cb({ currPos: { y: 200 } })),
}));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67485455

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档