【问题标题】:Jest testing/mocking Moment in React NativeReact Native 中的笑话测试/模拟时刻
【发布时间】:2018-07-15 21:48:05
【问题描述】:
我正在尝试对我的 React Native 组件进行一些测试,该组件使用 moment.js 作为日期选择器。我在测试/模拟 moment.js 时遇到问题,想知道是否可以获得任何示例/指针。我要测试的两个功能如下:
setDate = (newDate) => {
this.setState({ selectedDate: moment(newDate) });
}
handleOnPress = () => {
this.props.onModalButtonPress(this.state.selectedDate.unix());
}
【问题讨论】:
标签:
reactjs
unit-testing
react-native
momentjs
jestjs
【解决方案1】:
您可以尝试将具有以下内容的模拟 moment.js 放入 __mocks__ 文件夹(测试文件旁边)(手动模拟):
const moment = require.requireActual('moment');
export default (timestamp=0) => {
return moment(timestamp);
}
然后 Jest 将在您的测试中使用它。以上将确保调用moment() 将同时返回。这有助于测试比较。
如果您使用一些静态方法,例如weekdaysShort,那么您需要修改模拟以包含它(以及您可能使用过的任何其他方法):
const moment = require.requireActual('moment');
const mockedMoment = (timestamp=0) => {
return moment(timestamp);
};
mockedMoment.weekdaysShort = () => [
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat",
];
export default mockedMoment;