Jest asses称为函数

时间:2017-08-10 00:25:03

标签: jestjs

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

import { sendLib } from '../lib'

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

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

还有一种方法可以在不实际执行sendLib()的情况下进行测试吗?因为该函数调用了HTTP请求,所以我真的不想浪费时间来测试。

1 个答案:

答案 0 :(得分:0)

你应该在你的测试机智jest.fn中模拟lib,这样就不会调用你的实际函数实现或执行http请求。相反,它会调用mock函数。并且你可以断言下面所说的是我高大的一个粗略的例子

// 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: ''}) 
})