gpt4 book ai didi

javascript - moment-timezone.js – 在 Jest 测试中运行时出现错误

转载 作者:行者123 更新时间:2023-12-03 13:38:20 25 4
gpt4 key购买 nike

我使用 moment-timezone.js 时遇到错误。它在网页上运行得很好,但是当我尝试对其进行测试时,测试结果总是返回如下错误。

这是我在网页上使用的代码:

import moment from 'moment-timezone';

class TimezoneCityItem extends React.Component {

componentDidMount(){
this.setState({
time: moment.tz(this.props.timezone)
})
}

render(){
return (
<div>{this.state.time.format('HH:mm')}</div>
)
}
}

这是timezoneListDummyData:

const timezoneList = [
{ name: 'los-angeles', title: 'Los Angeles', timezone: 'America/Los_Angeles' },
{ name: 'washington', title: 'Washington', timezone: 'America/New_York' },
{ name: 'london', title: 'London', timezone: 'Europe/London' },
{ name: 'dubai', title: 'Dubai', timezone: 'Asia/Dubai' },
{ name: 'hongkong', title: 'Hongkong', timezone: 'Asia/Hong_Kong' },
];

export default timezoneList;

这是我在测试文件中使用的代码

import React from 'react';
import { shallow } from 'enzyme';
import TimezoneCityItem from '../TimezoneCity.item';
import timezoneList from '/lib/timezoneListDummyData'; // It just an array list of timezone

describe('<TimezoneCityItem />', () => {
test('Should render TimezoneCityItem correctly', () => {
const wrapper = shallow(<TimezoneCityItem {...timezoneList[0]} />);
expect(wrapper).toMatchSnapshot();
});
});

这是软件包的版本:

"moment": "~2.18.1",
"moment-timezone": "~0.5.13",

这是错误消息:

Test suite failed to run
TypeError: Cannot read property 'split' of undefined

at node_modules/moment-timezone/moment-timezone.js:36:34
at Object.<anonymous>.moment (node_modules/moment-timezone/moment-timezone.js:14:20)
at Object.<anonymous> (node_modules/moment-timezone/moment-timezone.js:18:2)
at Object.<anonymous> (node_modules/moment-timezone/index.js:1:120)
at Object.<anonymous> (imports/ui/components/mainLayout/TimezoneCity.item.jsx:3:49)
at Object.<anonymous> (imports/ui/components/mainLayout/TimezoneCity.jsx:3:47)
at Object.<anonymous> (imports/ui/components/mainLayout/MainLayout.jsx:6:47)
at Object.<anonymous> (imports/ui/components/mainLayout/__tests__/MainLayout.test.js:3:19)
at Generator.next (<anonymous>)
at new Promise (<anonymous>)
at Generator.next (<anonymous>)
at <anonymous>

最佳答案

可能有点晚了,但为了其他人的利益。我们之所以得到这个,是因为 moment-timezone 需要来自 moment 包的版本号。

如 moment-timezone.js 所示

	var momentVersion = moment.version.split('.'),
major = +momentVersion[0],
minor = +momentVersion[1];

当您运行 jest 时,它会尝试模拟您包含的所有内容,因此 moment 会被 mock 。由于排除了属性,因此仅模拟函数,因此您必须取消模拟 momentmoment-timezone 或在模拟的 moment< 中包含虚假版本号 对象。

关于javascript - moment-timezone.js – 在 Jest 测试中运行时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47772080/

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