#unit-testing #jestjs #datetimepicker #date-fns #muipickersutilsprovider
#модульное тестирование #jestjs #указатель даты и времени #дата -fns #muipickersutilsprovider #datetimepicker #дата-fns
Вопрос:
Я использую MuiPickersUtilsProvider
из @material-ui/pickers@
v-3.2.10
и использование подобных:
import DateFnsUtils from '@date-io/date-fns'
import { DateTimePicker, MuiPickersUtilsProvider } from '@material-ui/pickers'
<MuiPickersUtilsProvider utils={DateFnsUtils}>
<DateTimePicker .../>
</MuiPickersUtilsProvider>
Он работает в пользовательском интерфейсе, но при запуске тестового примера выдает ошибку следующим образом:
Ошибка типа: Utils не является конструктором
Но как только я использую import * as DateFnsUtils from '@date-io/date-fns'
наш тестовый пример работает, но в пользовательском интерфейсе появляется та же ошибка,
И когда я использую import {default as DateFnsUtils} from '@date-io/date-fns'
наш тестовый пример работает, но одна и та же ошибка возникает в обоих местах (пользовательский интерфейс и тестовый пример)
Я нашел аналогичное обсуждение по ссылке ниже, но без помощи
материал-ui-сборщики /проблемы /805
// setup file
var enzyme = require('enzyme');
var Adapter = require('enzyme-adapter-react-16');
require('jest-canvas-mock')
enzyme.configure({ adapter: new Adapter() });
crypto = require('@trust/webcrypto')
// fetch undefined
const fetchPolifill = require('whatwg-fetch')
global.fetch = fetchPolifill.fetch
global.Request = fetchPolifill.Request
global.Headers = fetchPolifill.Headers
global.Response = fetchPolifill.Response
function noOp () { }
if (typeof window.URL.createObjectURL === 'undefined') {
Object.defineProperty(window.URL, 'createObjectURL', { value: noOp})
}
Комментарии:
1. Вы также используете Typescript для построения кода?
2. Можете ли вы также поделиться своей конфигурацией jest?
3. добавлены конфигурации @tmhao2005
4. да, я использую Typescript
5. Нет. Я имел в виду конфигурацию jest, чтобы узнать, как вы преобразуете свой код в jest.
Ответ №1:
У меня возникла та же проблема, и я решил ее следующим кодом,
"<MuiPickersUtilsProvider utils={DateFnsUtils}>"
import React, { useState } from 'react'
import DateFnsUtils from '@date-io/date-fns';
import { MuiPickersUtilsProvider, KeyboardDatePicker } from '@material-ui/pickers';
const ProblemStatement = () => {
const [selectedDate, setSelectedDate] = useState(new Date('2014-08-18T21:11:54'))
const handleDateChange = (date) => {
setSelectedDate(date)
}
return (
<div>
ProblemStatement
<h2>datepicker</h2>
//this one
<MuiPickersUtilsProvider utils={DateFnsUtils}>
<KeyboardDatePicker
margin="normal"
id="date-picker-dialog"
label="Date picker dialog"
format="MM/dd/yyyy"
value={selectedDate}
onChange={handleDateChange}
KeyboardButtonProps={{
'aria-label': 'change date',
}}
/>
</MuiPickersUtilsProvider>
</div>
)
}
Ответ №2:
Я получил эту ошибку при использовании LocalizationProvider
для того, чтобы использовать DatePicker
компонент mui. В моем случае проблема была связана с опечаткой в dateAdapter
prop. Я прошел dataAdapter={AdapterDateFns}
вместо dateAdapter={AdapterDateFns}
. Проблема решена после исправления опечатки:
import AdapterDateFns from '@mui/lab/AdapterDateFns';
import LocalizationProvider from '@mui/lab/LocalizationProvider';
export default function App() {
return (
<LocalizationProvider dateAdapter={AdapterDateFns}>
<Main />
</LocalizationProvider>
);
}