Jest 如何测试在 A 函数中调用的 B 函数?

2020-05-23 20:34:54 +08:00
 Jack0112

如题,举个例子:

// ListItem.tsx
interface Props {
    onTouchStart: (e: React.TouchEvent) => void;
}

const ListItem: React.FC<Props> = (props) => {
    const handleTouchStart = (e: React.TouchEvent) => {
        // 在组件内部函数调用传入的函数
        props.onTouchStart(e);
        // 执行一些其他操作
    }

    return <div onTouchStart={handleTouchStart}></div>;
}

export default ListItem;
// ListItem.test.tsx
import { createElement } from 'rax';
import renderer from 'rax-test-renderer';

it('Test ListItem TouchStart', () => {
    const mockFunc = jest.fn();
    const component = renderer.create(<ListItem onTouchStart={mockFunc} />)
    const tree = component.toJSON();
    tree.eventListeners.touchstart();
    // 报错
    expect(tree.eventListeners.touchstart).toHaveBeenCalled();
})
expect(received).toHaveBeenCalled()

    Matcher error: received value must be a mock or spy function

    Received has type:  function
    Received has value: [Function handleTouchStart]

怎么在测试用例中测试传入props的函数是否存在? 怎么在测试用例中测试传入props的函数是否被调用?

1109 次点击
所在节点    问与答
3 条回复
ayase252
2020-05-23 20:37:46 +08:00
expect(mockFunc).toHaveBeenCalled()
你应该测的是你的 spy
Jack0112
2020-05-23 20:42:07 +08:00
@ayase252 怎么修改一下?能指点一下嘛?
Jack0112
2020-05-23 20:58:39 +08:00
@ayase252 不好意思,没仔细看,我试一试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/674756

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX