在嘲笑函数中返回Promise< string [] |从不

发布于 2025-01-26 17:23:15 字数 1540 浏览 2 评论 0原文

我正在使用React+Jest测试现有组件。它具有类似的函数过滤器:

const filterEmptyDeliveries = (arr): Promise<string[] | never> => {
    if (arr.length === 0) {
      return Promise.reject("empty") as any as Promise<never>
    }
    return Promise.resolve(arr) as Promise<string[]>
  }

在我的组件中,我称其为这样:

const whiteListArr = []
const setupDeliveryType = async () => {
   const tempAsin = [] // Empty or Not Empty
    try {
       ... other code
      if (tempAsin.length !== 0) {
        if (whiteListArr.length === 0) {
          whiteListArr.push(... some list computed above)
        } else {
          await filterEmptyDeliveries(asinWhiteList)
        }
       } else {
         await filterEmptyDeliveries(whiteListArr)
      } 
    } catch (err) {
      console.log(err)
    } finally {
      setLoading(false)
    }
  }

这就是我在测试中嘲笑我

const filterEmptyDeliveries = jest.fn()
filterEmptyDeliveries.mockResolvedValue(['A12334567'])

it('calls setupDeliveryType ', async () => {
      const wrapper = mount(<Component / >)
      await act(flushPromises)
      wrapper.update()
      await act(flushPromises)

      const whiteList = ['B00000000']
      ... other tests that pass so i'm pretty confident the code reaches here
      await act(flushPromises)
      expect(filterEmptyDeliveries).toHaveBeenCalled() // Fails

     /// Fails with
      Expected number of calls: >= 1
      Received number of calls:    0

    })

在哪里出错的方式?

I'm using React+JEST to test an existing component. It has a function filterDeliveries like so :

const filterEmptyDeliveries = (arr): Promise<string[] | never> => {
    if (arr.length === 0) {
      return Promise.reject("empty") as any as Promise<never>
    }
    return Promise.resolve(arr) as Promise<string[]>
  }

In my component I call it like this:

const whiteListArr = []
const setupDeliveryType = async () => {
   const tempAsin = [] // Empty or Not Empty
    try {
       ... other code
      if (tempAsin.length !== 0) {
        if (whiteListArr.length === 0) {
          whiteListArr.push(... some list computed above)
        } else {
          await filterEmptyDeliveries(asinWhiteList)
        }
       } else {
         await filterEmptyDeliveries(whiteListArr)
      } 
    } catch (err) {
      console.log(err)
    } finally {
      setLoading(false)
    }
  }

This is how I'm mocking in my tests

const filterEmptyDeliveries = jest.fn()
filterEmptyDeliveries.mockResolvedValue(['A12334567'])

it('calls setupDeliveryType ', async () => {
      const wrapper = mount(<Component / >)
      await act(flushPromises)
      wrapper.update()
      await act(flushPromises)

      const whiteList = ['B00000000']
      ... other tests that pass so i'm pretty confident the code reaches here
      await act(flushPromises)
      expect(filterEmptyDeliveries).toHaveBeenCalled() // Fails

     /// Fails with
      Expected number of calls: >= 1
      Received number of calls:    0

    })

Where Am I going wrong here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

触ぅ动初心 2025-02-02 17:23:15

您正在模拟一个称为filterDelive的函数,但是该组件正在调用filteremptydeliveries。

You are mocking a function called filterDeliveries, but the component is calling filterEmptyDeliveries.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文