如何更改被嘲弄的导入的行为? [英] How to change the behaviour of a mocked import?

查看:36
本文介绍了如何更改被嘲弄的导入的行为?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对Jest中的模拟和如何对实现进行单元测试感到相当困惑。问题是我想嘲笑不同的预期行为。

有没有办法做到这一点?由于导入只能位于文件的顶部,并且要能够模拟某些内容,因此必须在导入之前声明。我还尝试传递一个本地函数,以便可以覆盖行为,但是JEST抱怨您不允许传递任何本地函数。

jest.mock('the-package-to-mock', () => ({
  methodToMock: jest.fn(() => console.log('Hello'))
}));

import * as theThingToTest from '../../../app/actions/toTest'
import * as types from '../../../app/actions/types'

it('test1', () => {
  expect(theThingToTest.someAction().type).toBe(types.SOME_TYPE)
})

it('test2', () => {
  //the-package-to-mock.methodToMock should behave like something else
  expect(theThingToTest.someAction().type).toBe(types.SOME_TYPE)
})

您可以想象theThingToTest.someAction()在内部使用the-package-to-mock.methodToMock

推荐答案

您可以用间谍模拟并导入模拟的模块。在测试中,您可以使用mockImplementation

设置模拟的行为方式
jest.mock('the-package-to-mock', () => ({
  methodToMock: jest.fn()
}));
import { methodToMock } from 'the-package-to-mock'

it('test1', () => {
  methodToMock.mockImplementation(() => 'someValue')
})

it('test2', () => {
  methodToMock.mockImplementation(() => 'anotherValue')
})

这篇关于如何更改被嘲弄的导入的行为?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆