JestからVitestに移行する際に以下のような感じで jest-date-mockのadvancedTo
を使って時刻の固定している箇所をvitestで再現するのに少しハマったのでメモ📝
以下のような形でadvanceToを使って引数で渡した時間に固定できる🕛
import { advanceTo } from "jest-date-mock"; advanceTo(new Date("2021-05-03T15:35:47+09:00"));
vitestで時間を固定する方法
以下のようにadvanceTo
を使った時間を固定したテストの場合は、
import { mount } from "@vue/test-utils"; import Component from "@js/components/Foo.vue"; import { advanceTo } from "jest-date-mock"; describe("components/Foo.vue", () => { describe("default", () => { it("snapshot", () => { const props = { bar: 'bar' }; advanceTo(new Date("2021-05-03T15:35:47+09:00")); const wrapper = mount(Component, { props: props }); expect(wrapper.element).toMatchSnapshot(); }); });
以下のような形で書き換えると同様の挙動を再現できる✨
import { mount } from "@vue/test-utils"; import Component from "@js/components/Foo.vue"; import { advanceTo } from "jest-date-mock"; describe("components/Foo.vue", () => { describe("default", () => { it("snapshot", () => { const props = { bar: 'bar' }; vi.useFakeTimers(); vi.setSystemTime(new Date("2021-05-03T15:35:47+09:00")); const wrapper = mount(Component, { props: props }); expect(wrapper.element).toMatchSnapshot(); vi.useRealTimers(); }); });