web-dev-qa-db-fra.com

jest TypeScript - constructeur de date simulée

J'essaye de me moquer de new Date() pour renvoyer une date spécifique. Le code suivant:

const now = new Date()
jest.spyOn(global, 'Date').mockImplementation(() => now)

donne une erreur de compilation: Argument of type '() => Date' is not assignable to parameter of type '() => string'. Type 'Date' is not assignable to type 'string'.

Je pense que la raison en est que la plaisanterie pense que j'essaye de me moquer de Date() au lieu de new Date(). En effet, Date() renvoie une chaîne. Comment puis-je résoudre ce problème?

4
Ella Sharakanski

eh bien j'ai essayé cette solution, et cela a fonctionné ..

class MockDate extends Date {
    constructor() {
        super("2020-05-14T11:01:58.135Z"); // add whatever date you'll expect to get
    }
}

et dans l'avant-chaque de ce test, j'ai ajouté:

// @ts-ignore
global.Date = MockDate;

de cette façon chaque fois que j'appelais une fonction qui avait une nouvelle Date () à l'intérieur, elle renvoyait la date que j'ai ajoutée dans le constructeur de la classe MockDate ci-dessus!

1
Riham Nour