gpt4 book ai didi

javascript - 如何断言一个函数是从另一个函数中调用的?

转载 作者:数据小太阳 更新时间:2023-10-29 04:08:45 26 4
gpt4 key购买 nike

我在 React 中有一个带有 onChange 事件的组件。在下面的代码中,我需要断言调用了正确的方法

this.props.onChangeImage()

在 Gallery 组件中调用。

export class Form extends React.PureComponent {

componentDidMount = () => {
this.props.getUser();
this.props.getImages();
this.props.getBoards();
}

render() {
if (this.props.pin === null) {
let boards = [];
boards = this.props.boards;
boards = boards.data.map(
(item) => <MenuItem key={item.id.toString()} value={item.name} primaryText={item.name} />
);
return (
<div>
<Helmet
title="Form"
meta={[
{ name: 'description', content: 'Description of Form' },
]}
/>
<Gallery images={this.props.images} onChange={this.props.onChangeImage} />
</div>
);
}
return (<div className="spinner-container"><CircularProgress /></div>);
}
}

下面,在 onChangeImage 方法中,我试图断言调用了 sendEventToParentWindow 方法。

function mapDispatchToProps(dispatch) {
return {

onChangeImage: (event) => {
dispatch(createPinImage(event.target.value));
sendEventToParentWindow({
action: 'change-image',
description: 'Change image',
});
},
};
}

function sendEventToParentWindow(message) {
window.postMessage(message, window.location.href);
}

export default connect(mapStateToProps, mapDispatchToProps)(Form);

我在这里查看了很多答案,虽然这个答案看起来最接近,但它并没有让我到达那里:Jest - mocking a function call

编辑:这是我的测试,我认为这是错误的,因为它分配模拟函数直接调用 onChange,而实际上它应该调用反过来调用模拟的函数。我需要以某种方式调用 onImageChange 函数,然后验证是否调用了我的 spy 程序。

import Gallery from '../index';
import * as formIndex from '../../../containers/Form';

describe('<Gallery />', () => {
it('Expect sendMessageToParentWindow to be called on image change', () => {
const sendEventToParentWindowMock = jest.spyOn(formIndex, 'sendEventToParentWindow');
const gallery = shallow(<Gallery images={imagesMockData} onChange={sendEventToParentWindowMock} />);
gallery.find('input#image-1').simulate('change');

expect(sendEventToParentWindowMock).toBeCalled();
});
}

最佳答案

正如我在评论中提到的,您可以将模拟函数作为 prop 传递,其实现将包含对您的 sendEventToParentWindow 函数的调用。也就是说,您需要创建两个模拟函数。

  1. sendEventToParentWindow 模拟函数。
  2. onChangeImage 带有实现的模拟函数,其中实现将仅包含对您的 sendEventToParentWindow 模拟函数的调用。

所以测试看起来像这样,

describe('<Gallery />', () => {
it('Expect sendMessageToParentWindow to be called on image change', () => {
const sendEventToParentWindowMock = jest.fn();
const onChangeImageMock = jest.fn(() => {
sendEventToParentWindowMock();
});

const gallery = shallow(<Gallery images={imagesMockData} onChange={onChangeImageMock} />); // Passing the mocked onChangeImage as prop
gallery.find('input#image-1').simulate('change');

expect(sendEventToParentWindowMock).toBeCalled();
});
}

希望对您有所帮助:)

关于javascript - 如何断言一个函数是从另一个函数中调用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45102922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com