我对如何对实现进行单元测试的Jest 感到困惑.问题是我想模仿不同的预期行为.

有没有办法做到这一点?由于导入只能位于文件的顶部,并且为了能够模拟某些内容,必须在导入之前声明它.我还try 传递一个本地函数,以便覆盖行为,但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')
})

React-native相关问答推荐

AxiosError:Reaction Native EXPO开发版本中的网络错误

收到错误Constants.platform.ios.model已被弃用,以支持 expo-device

React Native 动画.您必须在转换属性中精确指定一个属性.

如何在 React Navigation 5 中将父函数传递给子屏幕?

library not found for -lRCTGeolocation

React Native:双击退出应用程序

React Native:无法点击调试菜单

如何渲染多行文本组件,行间有白色间隙

React native Touch 事件正在通过绝对视图

可以react native使用jQuery

组件div的视图配置 getter 回调必须是一个函数(收到 undefined)

如何使用 Expo 在真实的 iOS 设备上运行应用程序?

React Native 无法运行堆栈跟踪

查找文本输入框和按钮字段的资源名称以响应本机 android 应用程序

React Native 从导航堆栈中清除上一个屏幕

在 FlatList 上使用 React Native 搜索过滤器

React-Native ios App 在没有报告的情况下崩溃

React.createClass vs. ES6 箭头函数

带有 React Native 的 EventEmitter 和 Subscriber ES6 语法

对未计算文件的本机Bundle sha-1 做出react(无法从assets index.android.bundle 加载脚本)