0

我有一个自定义钩子,我正在尝试编写使用反应钩子测试库包的测试,我想知道如何测试自定义钩子中未返回但在其他函数中使用的内部函数。

const customHook = () => {
  const [count, setCount] = React.useState(0);

  const doSomeThing = () => {
    ..code
  }

  const increment = () => {
    doSomeThing(); //Would like to make assertations on this
    setCount((x) => x + 1 );
  }

  return { count, increment }
}

export default customHook;

测试

it('Should call increment', () => {
  const { result } = renderHook(() => useCustomHook())

  act(() => {
    result.current.increment();
  });

  expect(doSomeThing).toHaveBeenCalled(); //end result of what I would like help on
});

如何编写测试以查看 doSomething 是否已被调用/使用?

4

1 回答 1

2

你不能。它完全在该钩子内部,并且没有提供任何句柄来获取该函数。所以不能mock,也不能直接调用。不可能只测试doSomething你拥有的功能。

更重要的是,你不应该。您不想在该级别进行测试。这是一个私有的实现细节。你应该测试你的钩子的公共接口。这意味着测试参数、返回值以及钩子返回的调用函数如何影响下一个返回值。

测试不应该关心函数是如何工作的。测试应该只关心函数是否正确地完成了它的工作。

这意味着您的测试只能验证是什么doSomething,而不是它是否被调用。到目前为止,它根本没有做任何事情,所以没有什么要测试的。

于 2021-08-28T00:01:14.943 回答