【问题标题】:How to mock Date object in typescript using Jest?如何使用 Jest 在打字稿中模拟 Date 对象?
【发布时间】:2020-04-28 02:08:41
【问题描述】:

我正在尝试模拟一个将用于所有单元测试用例的日期对象。我有很多关于 javascript 的参考资料,但由于类型错误,这在 typescript 中不起作用。任何人都可以提供解决此问题的解决方案吗?

// sampleMethod() Test Suite
describe('sample Method', () => {
    it('should match two objects', () => {
        // Preparing
        const sampleRequest: sampleRequestType = {
            key: '0',
            status: 'success',
            creation_time: new Date(),
            attempts: 0,
            last_attempt_time: new Date()
        };
        // Executing
        const result = sampleobject.sampleMethod();
        // Verifying
        expect(result).toEqual(sampleRequest); // assume result also return the same value as sampleRequest
    });
});

【问题讨论】:

  • 你能发布你的源代码吗!我们可以建议您的测试代码模式
  • @DavidJawHpan,我已经更新了代码,请查看。
  • 您的sampleMethod 是否会始终返回该结果!您应该比较主要数据或类型,而不是比较整个对象。例如statusexpect(result.status).toEqual('success')
  • @DavidJawHpan,我的要求是检查对象键和值是否完全相同

标签: javascript node.js typescript jestjs


【解决方案1】:

由于 Jest 是在 jasmine 之上开发的,所以你可以使用它

const mockDate = new Date(1434319925275);
spyOn(window, 'Date').and.callFake(() => {
return mockDate;
});

【讨论】:

    【解决方案2】:

    @hari 你可以重构你的sampleMethod 并移除对 Date 对象的硬依赖。

    不要在方法内部直接实例化日期对象(new Date),而是更改方法并接收日期对象作为参数。

    这样,您可以轻松地模拟 Date 依赖项。

    【讨论】:

    • 嘿,这里的逻辑是我们无法对通过测试用例的方法进行任何更改,请建议我如何模拟日期。这就是这里提出的问题
    • @hariprasanth,你可以这样做global.Date = jest.fn()
    • 当我使用 global.date typescript 时会抛出错误 Type 'Mock' is missing the following properties from type 'DateConstructor': parse, UTC, now
    • mmm.... 在这种情况下,您必须创建一个与 Date 对象相同的模拟。您需要将这些属性添加到您的模拟中
    • 能否举个例子。
    猜你喜欢
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2019-10-13
    • 1970-01-01
    • 2017-12-20
    相关资源
    最近更新 更多