날짜 개체를 사용하는 구성 요소는 시간대별로 서로 다른 스냅샷을 생성합니다.
효소와 효소를 함께 사용해서 반응성분의 제스트 스냅숏 테스트를 하고 있습니다.얄팍한 스냅숏을 테스트하고 있습니다.DateRange표시 필드를 현재 범위로 렌더링하는 구성요소(예:5/20/2016 - 7/18/2016)와 2DateInput를 선택할 수 있는 컴포넌트Date즉, 내 스냅샷에 이 정보가 포함되어 있습니다.Dates 양쪽의 컴포넌트에 전달합니다.DateInput소품 및 텍스트 표현에서는 자동으로 해결됩니다.테스트에서 다음 항목을 사용하여 몇 가지 고정된 날짜를 만들고 있습니다.new Date(1995, 4, 23).
다른 타임존에서 테스트를 실행하면 다른 스냅샷이 생성됩니다.Date(year, month, ...)컨스트럭터는 로컬 시간대에 날짜를 만듭니다.예: 의 사용new Date()로컬 시간대 실행과 CI 서버 실행 간에 스냅샷의 차이가 발생합니다.
- value={1995-05-22T22:00:00.000Z}
+ value={1995-05-23T00:00:00.000Z}
날짜에서 시간대 오프셋을 제거하려고 했지만, 로컬 시간대 의존 표현이 사용되는 표시 필드 값이 스냅샷에 다르게 표시되었습니다.
- value={5/20/2016 - 7/18/2016}
+ value={5/19/2016 - 7/17/2016}
어떻게 하면 테스트 결과를 동일하게 만들 수 있을까요?Date실행 시간대에 관계없이 스냅샷에 저장됩니까?
몇 시간 또는 며칠 동안 이것과 씨름했지만, 이것만이 효과가 있었습니다.
1) 테스트 시:
Date.now = jest.fn(() => new Date(Date.UTC(2017, 7, 9, 8)).valueOf())
2) 다음으로,TZ테스트를 실행하기 전에 env var를 참조하십시오.그래서 내 패키지에 있는 스크립트.json:
(Mac 및 Linux만 해당)
"test": "TZ=America/New_York react-scripts test --env=jsdom",(Windows)
"test": "set TZ=America/New_York && react-scripts test --env=jsdom",
나는 결국 두 부분으로 구성된 해결책을 얻게 되었다.
작성 안 함
Date타임존 의존적인 방법으로 테스트 중인 객체.타임스탬프를 직접 사용하여 테스트 코드를 판독하지 않으려면Date.UTC,예.new Date(Date.UTC(1995, 4, 23))- 회전하는 데 사용된 날짜 형식 지정기 모킹
Date를 표시값으로 변환하여 타임존에 의존하지 않는 표현(예: 사용)을 반환합니다.Date::toISOString()다행히 현지화 모듈의 기능을 조롱하기만 하면 되기 때문에 제 경우 이 작업은 쉬웠습니다. 컴포넌트가 스스로 문자열로 바뀌면 더 어려워질 수 있습니다.
위의 솔루션에 도달하기 전에 스냅샷 작성 방법을 어떻게든 변경하려고 했습니다.못생겼죠 왜냐면 효소-대-대-대-대-대-대-대-대-대-손이toISOString(), 그래서 나는 그것을 사용해야만 했습니다._.cloneDeepWith모든 수정이 가능합니다.Dates. 어쨌든 잘 되지 않았다.왜냐하면 내 테스트에는 다음 케이스도 포함되어 있었기 때문이다.Date타임스탬프(위 설명보다 컴포넌트가 훨씬 복잡함) 및 타임스탬프와 테스트에서 작성한 날짜 사이의 상호작용을 명시적으로 확인할 수 있습니다.그래서 처음에는 모든 날짜 정의가 같은 시간대를 가리키고 있는지 확인해야 했고, 나머지는 같은 시간대를 가리키고 있는지 확인해야 했습니다.
(2017년 11월 3일) :★★★★★를 확인했을 때enzyme-to-json들어서는 수 .toISOString()이제 더 이상 문제가 되지 않고 조롱당할 수도 있습니다.역사에서도 찾을 수 없었기 때문에 어느 도서관이 잘못 기재한 것일지도 모릅니다. 시험해 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ :)
i를 해서 이렇게 요.timezone-mock 「전역적인 것」을 대신합니다.Date제가 찾을 수 있는 가장 쉬운 해결책입니다.
이 패키지는 몇 가지 테스트 시간대를 지원합니다.
import timezoneMock from 'timezone-mock';
describe('when in PT timezone', () => {
beforeAll(() => {
timezoneMock.register('US/Pacific');
});
afterAll(() => {
timezoneMock.unregister();
});
// ...
https://www.npmjs.com/package/timezone-mock
는 결국 이 .toLocaleString('ToString'으로) 'ToString'입니다.「」를 사용합니다.sinon가 했어 는는:::::
var toLocaleString;
beforeAll(() => {
toLocaleString = sinon.stub(Date.prototype, 'toLocaleString', () => 'fake time')
})
afterAll(() => {
toLocaleString.restore()
})
'아까부터 을 직접 할 수 .Date브젝,,넌넌 넌직찮찮아아
나에게 맞는 2020년 솔루션
beforeEach(() => {
jest.useFakeTimers('modern');
jest.setSystemTime(Date.parse(FIXED_SYSTEM_TIME));
});
afterEach(() => {
jest.useRealTimers();
});
★★★★★★★★★를 사용하고 있는 경우는new Date()를 사용하면 할 수 : Date.가 아닌 컨스트럭터에서는 다음과 같은 작업을 수행할 수 있습니다.
const RealDate = Date;
beforeEach(() => {
// @ts-ignore
global.Date = class extends RealDate {
constructor() {
super();
return new RealDate("2016");
}
};
})
afterEach(() => {
global.Date = RealDate;
});
이 이슈는 당신이 여기 있다면 꼭 방문해야 합니다.
" " " TZ=UTC 나 my my my.env이치노
간단한 사실만으로도 쉽게 할 수 있다.
사용방법:
new Date('some string').
이렇게 하면 항상 유효하지 않은 날짜가 지정되며, 어떤 기계에 있든 항상 유효하지 않은 날짜가 지정됩니다.
건배.
새로운 날짜(1466424490000)와 같은 임의의 날짜를 새로운 날짜()로 호출할 수 있습니다.
언급URL : https://stackoverflow.com/questions/40935886/components-using-date-objects-produce-different-snapshots-in-different-timezones
'programing' 카테고리의 다른 글
| 로컬 json 파일에 데이터를 쓸 수 있는 것은 angular만 있으면 됩니다. (0) | 2023.03.01 |
|---|---|
| 송신 후 검증 에러가 발생했을 경우, p:dialog를 열어 둡니다. (0) | 2023.03.01 |
| ACF 관계 필드 - 다른 포스트 유형의 get_field 값 (0) | 2023.03.01 |
| JavaScript 라이브러리를 위한 최고의 LINQ는 무엇입니까? (0) | 2023.03.01 |
| 알 수 없는 속성 이름을 가진 JSON 스키마 (0) | 2023.03.01 |