我在项目中使用快照测试,并且在CI服务器上运行此特定测试时遇到一个奇怪的问题:它显示时区名称而不是GMT代码,从而导致测试失败。
我尝试使用“ moment-timezone”和Date.UTC()对日期进行归一化,显示的结果是正确的日期,并且存在与上述相同的问题。
我也曾尝试对 global.Date 对象进行存根处理,但是组件抱怨道具不兼容。
it('should render with props', () => {
const order = {
merchant: { logo: 'abc', name: 'Pizza Hut' },
bag: {
items: [{ name: 'Corn & Bacon' }],
total: {
valueWithDiscount: 99.99,
},
},
delivery: {
deliversAt: new Date('2019-05-21 13:00'),
},
payment: {
mode: 'online',
},
lastStatus: API_STATUSES.cancelled,
createdAt: new Date('2019-05-21 12:00'),
details: {},
};
const wrapper = shallowMount(Order, {
...commons,
propsData: { order },
});
expect(wrapper).toMatchSnapshot();
});
请确保预期日期与收到的日期相同,但是在语法上有所不同:
<div class="order__details">
- <orderdetails-stub paymentmode="online" deliverytime="Fri Jun 21 2019 10:00:00 GMT-0300 (GMT-03:00)" value="99.99" laststatus="cancelled"></orderdetails-stub>
+ <orderdetails-stub paymentmode="online" deliverytime="Fri Jun 21 2019 10:00:00 GMT-0300 (Brasilia Standard Time)" value="99.99" laststatus="cancelled"></orderdetails-stub>
答案 0 :(得分:0)
将Date字符串用作此类道具非常危险,并且可能会导致您遇到的问题。
根据我的经验,测试的最佳实践是使用Date.getTime()
,因此值是毫秒数,没有任何语言环境信息。
或者,您可以使用this article中所述的moment-timezone
:
import moment from 'moment-timezone';
it('renders without crashing', () => {
moment.tz.setDefault('EST');
let props = {
currentDay: moment("2017-09-15 09:30:00").format("MMM Do YYYY h:mm:ss a")
};
const tree = renderer.create(<App {...props} />).toJSON();
expect(tree).toMatchSnapshot();
});