开玩笑的模拟类实例函数

时间:2018-10-17 17:10:55

标签: javascript ecmascript-6 jestjs

我有一个看起来很简单的方案,但是我无法在文档中找到满足我需要的示例。我也进行了搜索,但显然没有找到任何东西...

我想从一个类中模拟一个函数,该类已在我实际测试的函数中初始化并使用。

这是一个例子:

// helpers.js
import API from './api'

export const validateUsername = async (username) => {
  const myApi = new API()
  try {
    await myApi.validate(username)
    return 'valid'
  } catch (e) {
    return 'invalid'
  }
}

在测试中,我想模拟myApi.validate以使其返回有效的响应或引发。但是由于某种原因,我找不到解决方法。

// helpers-test.js
it('returns "invalid" if the username is invalid', async () => {
  // here I need to mock myApi.validate to return or throw
})

我真的不确定为什么我还没有弄清楚,看来很常见吗?

有人吗?

1 个答案:

答案 0 :(得分:0)

所以我想通了@Volodymyr。

我认为我的主要问题是在 模拟之前导入lib。

jest.mock('path/to/api')
import {Api} from 'path/to/api'

const validateMock = jest.fn().mockImplementation(() => {...})
Api.prototype.validate = validateMock

// now it works