#javascript #reactjs #jestjs #create-react-app #storybook
#javascript #reactjs #jestjs #создать-реагировать-приложение #сборник рассказов
Вопрос:
Я использую @storybook/react
6 в create-react-app
проекте.
У меня есть тысячи тестов и макетов для всех моих хранилищ / объектов и так далее.
В этих издевательствах используется jest.fn()
.
Я хотел бы повторно использовать эти насмешки в своих сборниках рассказов, но там сказано jest is not defined
, что имеет смысл.
Мне интересно, есть ли простой способ сделать jest глобально доступным при запуске сборника рассказов.
В настоящее время я добавляю import jest from 'jest-mock'
в каждый макет файла, который я использую, но мне интересно, есть ли лучшее решение.
Пример:
test.stories.tsx
import React from 'react';
export default {
title: 'Test'
};
export Test = () => <button onClick={jest.fn()}>Test</button>;
Будет скомпилирован, но не будет запущен -> jest is not defined
ошибка
import React from 'react';
import jest from 'jest-mock';
export default {
title: 'Test'
};
export Test = () => <button onClick={jest.fn()}>Test</button>;
Работает нормально, но я бы хотел избежать необходимости импортировать jest-mock
везде.
Ответ №1:
Вы можете гарантировать, что макет будет доступен во всех ваших историях, добавив следующие строки в preview.js
файл в .storybook
папке вашего проекта:
import jest from 'jest-mock';
window.jest = jest;
Из документации сборника рассказов:
Используйте preview.js для глобального кода (например, импорта CSS или макетов JavaScript), который применяется ко всем историям.
Комментарии:
1. добавлено
import jest from 'jest-mock';
preview.js
, но оно не работает2.Попробовал еще раз, и у меня тоже ничего не получилось; извините; Я, кажется, неправильно запомнил, как это работает. Следующее, хотя и не очень приятное, похоже, выполняет свою работу: в preview.js:
import jest from 'jest.mock'
window.jest = jest
3. Отредактировал мой ответ, чтобы включить более точную информацию.
4. Спасибо, что работает! Наверное, я никогда не понимал, что вы можете устанавливать
window
свойства внутриpreview.js
.
Ответ №2:
Вам нужно установить его глобально в конфигурации jest. https://jestjs.io/docs/en/configuration#globals-object
Комментарии:
1. Как это сделать в контексте CRA и сделать его глобально доступным в сборнике рассказов?