4

我有一个非常简单的日期组件:

import { DateTime } from 'luxon';
export const SimpleDateCell = ({ item, itemKey }) => {
    const isoDateString = item[itemKey];

    if (!isoDateString) {
        return null;
    }

    const formattedDate = DateTime
        .fromISO(isoDateString, { zone: 'utc' })
        .setZone('local')
        .toLocaleString(DateTime.DATETIME_MED);

    return (
        <time dateTime={isoDateString} title={isoDateString}>
            {formattedDate}
        </time>
    ); };

我只是在本地测试它:

import React from 'react'; 
import SimpleDateCell from './SimpleDateCell'; 
import { DateTime, Settings } from 'luxon';
import renderer from 'react-test-renderer';

const testData = {
    companyName: 'test company',
    tenantId: 'ai/prod/00DA0000000XoMwMAK',
    // this will be different on different servers when .setZone('local')
    createdDate: '2019-02-13T15:53:00', };

describe('SimpleDateCell', () => {
    it('should match the snapshot', () => {


        const tree = renderer
            .create(
                <SimpleDateCell item={testData} itemKey="createdDate" />
            ).toJSON();
        expect(tree).toMatchSnapshot();
    });  });

问题是单元测试必须在我制作快照时在同一时区运行。所以我们的 CI 服务器拒绝了这个。

有没有办法在任何时区进行此通行证? 也许模拟 setZone('local') 响应?那里有任何 CI 专家使用 luxon 吗?

谢谢!

4

1 回答 1

3

Settings.defaultZone应该管用。以防我强调:它会影响所有方法说DateTime.local(). 有人已经对此感到困惑

作为替代方案,您可以Date使用timezone-mocktimezoned-date我认为也应该有帮助的来模拟本地人。Date如果出于某种原因您的代码的某些部分与本机而不是 luxon一起使用,那么这种方法会更加一致DateTime

于 2019-07-19T18:40:56.340 回答