【问题标题】:Jest asses called functions开玩笑的驴叫函数
【发布时间】:2017-08-10 00:25:03
【问题描述】:

我正在使用 Jest 测试我的 graphql 端点。基本上我正在评估解析器返回的结果。但在这种情况下,我想测试是否在解析器中使用特定参数调用了一个函数。代码类似于

import { sendLib } from '../lib'

export default {
  send: async (input) => {
    const data = {
      foo: 1,
      bar: 2,
      ...input
    }
    await sendLib(data)
    return { input }
  }
}

我想确保使用data 参数调用sendLib()。最重要的是我需要测试data 是否具有正确的值。我一直在阅读 Jest 的 .toHaveBeenCalledWith(),但我不知道它如何适合我的情况。

还有没有办法在不实际执行sendLib() 的情况下进行测试?因为该函数调用了一个 HTTP 请求,而我真的不想在测试上浪费时间。

【问题讨论】:

    标签: jestjs


    【解决方案1】:

    您应该在您的测试中使用 jest.fn 模拟 lib,这样它就不会调用您的实际函数实现或执行 http 请求。相反,它会调用模拟函数。你可以断言它在下面被称为是我身高的一个粗略例子

    // filetotest.js
    import { sendLib } from '../lib'
    
    export default {
      send: async (input) => {
        const data = {
          foo: 1,
          bar: 2,
          ...input
        }
        await sendLib(data)
        return { input }
      }
    }
    
    //__tests__/filetotest.test.js
    
    import { sendLib } from '../../lib'
    import defaultImport from '../filetotest.js'
    jest.mock('../../lib/', () => {
      return {
        sendLib: jest.fn()
      }
    })
    
    test('call with correct data', async () => {
      // call the function you are suppose to to test
      await defaultImport()
      // sendLib is a mockFn as jest.mock calls are hoisted
      expect(SendLib).toHaveBeenCalledWith({data: ''}) 
    })

    【讨论】:

      猜你喜欢
      • 2021-02-26
      • 2020-02-24
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      相关资源
      最近更新 更多