作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个函数可以检查参数是否与今天相同或晚于今天,在我的函数中我使用了 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/
我是一名优秀的程序员,十分优秀!