Jest -作为包模块的命名组件导出的默认类的模拟方法



我们有以下类:

组件1:

import React, { Component } from 'react'
import {foo} from 'blah'
import {bar} from 'blah-blah'
export default class Component1 extends Component {
static propTypes = {
...
...
}
...
...
save() {
doSomeOp()
}
render() {
...
...
}
}

组件2:

import React, { Component } from 'react'
import {foo} from 'blah'
import {bar} from 'blah-blah'
export default class Component2 extends Component {
static propTypes = {
...
...
}
...
...
render() {
}
}

现在,我们在包模块中有以下组件- '@foo-bar/package'。这个包的index.js如下所示:

index.js:

import Component1 from './src/component1'
import Component2 from './src/component2'
export { Component1, Component2 } 

这个包在我试图测试的另一个组件中使用。该组件的代码如下:

TestComponent:

import React from 'react'
import { Component1 } from '@foo-bar/package'
export function TestComponent(props) {
...
...
return (
<Component1 />   
)
}

我有一些逻辑在这个TestComponent触发Component1save()方法。我打算做的是保持Component1的所有其他属性相同,但只模拟save()方法。这怎么可能呢?谢谢!

jest.mock('@foo-bar/package', () => {
???
})

您可以尝试:

import { Component1 } from '@foo-bar/package'
beforeAll(() => {
jest.spyOn(Component1.prototype, 'save').mockImplementation(() => jest.fn())
})

最新更新