こんにちはk42un0k0です
今回はエラーを解決したので、嬉しさ余って記事を書こうと思います。
エラーの発生条件
-
@testing-library/jest-dom
を使っている -
@jest/globals
を使っている
今回遭遇したエラー
「Property 'toBeInTheDocument' does not exist on type 'Matchers'」
@testing-library/jest-dom
を使い始めたときに遭遇したエラーです
こちらのエラーは@jest/globals
を使ってると遭遇します
対処法
なんでもいいのでtsconfig.json
のinclude
でインクルードされてるtsファイルの中で次を書き加えてください
import { TestingLibraryMatchers } from "@testing-library/jest-dom/matchers";
declare module "expect" {
interface Matchers<R extends void | Promise<void>, T = unknown>
extends TestingLibraryMatchers<typeof expect.stringContaining, R> {}
}
私はjestのセットアップファイルに書き加えました
jest.setup.ts
import "@testing-library/jest-dom";
import { TestingLibraryMatchers } from "@testing-library/jest-dom/matchers";
declare module "expect" {
interface Matchers<R extends void | Promise<void>, T = unknown>
extends TestingLibraryMatchers<typeof expect.stringContaining, R> {}
}
原因
こちらのエラーは本来jest
のdescribe
等を暗黙的に使用できる状態ならば起きません
というのも@testing-library/jest-dom
の中で以下のように宣言されてるからです
import { TestingLibraryMatchers } from './matchers';
declare global {
namespace jest {
interface Matchers<R = void, T = {}> extends TestingLibraryMatchers<typeof expect.stringContaining, R> {}
}
}
この宣言がライブラリ内であるので、グローバルなjest
を使っている場合は自動でカスタムマッチャーの型定義が使えます
ですが今回は@jest/globals
を使っている関係で、型が違うので宣言しなおさなきゃいけなかったみたいです。