web-dev-qa-db-ja.com

jest TypeScript-モック日付コンストラクタ

特定の日付を返すようにnew Date()をモックしようとしています。次のコード:

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

コンパイルエラーが発生します:Argument of type '() => Date' is not assignable to parameter of type '() => string'. Type 'Date' is not assignable to type 'string'

その理由は、jestがDate()ではなくnew Date()をモックしようとしていると考えているためだと思います。実際、Date()は文字列を返します。この問題を解決するにはどうすればよいですか?

4

よく私はこの解決策を試してみましたが、うまくいきました。

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

そのbeforeEachのそれぞれで、私は追加しました:

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

このように、内部にnew Date()が含まれる関数を呼び出すと、上記のMockDateクラスのコンストラクターで追加した日付が返されます。

1
Riham Nour