✅
Mantine UI v7をTesting Libraryするのが大変だった件
環境
一部抜粋
- Bun@1.0.30
- react@18.2.0
- react-dom@18.2.0
- vitest@1.4.0
- jest-environment-jsdom@29.7.0
- jsdom@24.0.0
解決法
mantineがjsdomの未実装のブラウザ依存のAPI?を呼び出してるっぽいので以下のbeforeAll()
が必要みたい。
renderするときのwrapperにMantineのProviderを渡すのも忘れずに
/**
* @jest-environment jsdom
*/
import { render, screen } from '@testing-library/react'
import { beforeAll, describe, it, vi } from 'vitest'
import { Provider } from '@/provider'
describe('Hoge', () => {
beforeAll(() => {
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: vi.fn().mockImplementation((query) => ({
matches: false,
media: query,
onchange: null,
addListener: vi.fn(), // deprecated
removeListener: vi.fn(), // deprecated
addEventListener: vi.fn(),
removeEventListener: vi.fn(),
dispatchEvent: vi.fn(),
})),
})
global.ResizeObserver = class ResizeObserver {
observe() {}
unobserve() {}
disconnect() {}
}
})
})
Discussion