gpt4 book ai didi

javascript - Jest 测试涉及当前日期的函数

转载 作者:行者123 更新时间:2023-12-02 23:39:26 25 4
gpt4 key购买 nike

我有一个函数可以检查参数是否与今天相同或晚于今天,在我的函数中我使用了 new Date() ,如下所示

import moment from "moment";

const validateDate = ({ date }) => {
return moment(date, "DD-MM-YYYY").isSameOrAfter(
moment(new Date(), "DD-MM-YYYY", "days")
);
};

export default validateDate;

我的测试将是这样的:

import validateDate from "./index";

it("is same or after today", () => {
expect(validateDate({ date: "16-05-2019" })).toBeTruthy();
});

问题是测试将在 17-05-2019 失败。如何解决这个问题?

我尝试过这个想法,但不确定它是否可行。

const validateDate = ({ date, today = new Date() }) => {
return moment(date, "DD-MM-YYYY").isSameOrAfter(
moment(today, "DD-MM-YYYY", "days")
);
};

我的测试:

expect(validateDate({ date: "16-05-2019" }, today: new Date())).toBeTruthy();

最佳答案

您可以模拟 Date 对象以确保 new Date() 返回条件日期。

global.Date = class extends RealDate {
constructor() {
super();
return new RealDate(isoDate);
}
};

只需在测试前覆盖全局 Date 对象,然后在完成测试后恢复。

最终代码:

describe("validateDate", () => {
const RealDate = Date;

function mockDate(isoDate) {
global.Date = class extends RealDate {
constructor() {
super();
return new RealDate(isoDate);
}
} as any;
}

afterEach(() => {
global.Date = RealDate;
});

it("should return true", () => {
mockDate(moment("15-05-2019", "DD-MM-YYYY").toISOString());
expect(validateDate({date: "16-05-2019", today: new Date()})).toBeTruthy();
});
});

关于javascript - Jest 测试涉及当前日期的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56141629/

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