首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用react-hooks-testing-library测试自定义钩子

使用react-hooks-testing-library测试自定义钩子
EN

Stack Overflow用户
提问于 2021-03-26 15:34:17
回答 1查看 524关注 0票数 1

我正在尝试使用react-hooks-testing-library为这个自定义钩子编写测试。

代码语言:javascript
复制
import { deleteArticleById } from '../../API/articles/deleteArticleById';
const useArticleDelete = () => {
  const [articleId, setArticleId] = useState(null);
  const setArticleIdToDelete = id => {
    setArticleId(id);
  };

  const deleteArticle = useCallback(
    async () => {
      if (!articleId) {
        return;
      }

      try {
        await deleteArticleById(articleId);
        setArticleId(null);
      } catch (e) {
        console.log(e);
      }
    },
    [articleId]
  );

  return { articleId, setArticleIdToDelete, deleteArticle };
};

export default useArticleDelete;

以下是我的测试

代码语言:javascript
复制
import { renderHook, act } from '@testing-library/react-hooks'
import { deleteArticleById } from '../../API/articles/deleteArticleById';
import useArticleDelete from './useArticleDelete';

jest.mock('../../API/articles/deleteArticleById');

describe('useArticleDelete', () => {
  test('should use ArticleDelete', () => {
    const { result } = renderHook(() => useArticleDelete())
    act(() => {
      result.current.setArticleIdToDelete(1)
    })
    expect(result.current.articleId).toBe(1)
  });

  test('should delete article', async () => {
    deleteArticleById.mockResolvedValue({});
    const { result } = renderHook(() => useArticleDelete())
    act(() => {
      result.current.deleteArticle()
    })
    expect(result.current.articleId).toBeNull()
  })
});

测试“应该删除文章”已经写好了,但是它们没有覆盖useArticleDelete钩子中deleteArticle函数中的try..catch之间的代码行。

请帮我找出我做错了什么

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-26 15:40:30

在调用deleteArticle方法之前,您需要使用await,因为它是异步调用。函数在完成await deleteArticleById(articleId);的执行之前不会返回任何内容,所以您需要等待它被执行。

代码语言:javascript
复制
test('should delete article', async () => {
    deleteArticleById.mockResolvedValue({});
    const { result } = renderHook(() => useArticleDelete())
    await result.current.deleteArticle()
    expect(result.current.articleId).toBeNull()
  })
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66812676

复制
相关文章

相似问题

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