特定の日付を返すように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()
は文字列を返します。この問題を解決するにはどうすればよいですか?
よく私はこの解決策を試してみましたが、うまくいきました。
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クラスのコンストラクターで追加した日付が返されます。