@storyshots/react
Реализует клиент preview для react приложений:
import { createPreviewApp } from '@storyshots/react';
// Инициализация превью
export const { it, describe, each, run } = createPreviewApp({
// Определение поведения "по умолчанию" для внешних зависимостей
createExternals,
// Маркировка методов для записи в журнал вызовов
createJournalExternals,
});
// Описание историй
const stories = [describe('...', it('...'))];
// Запуск клиента preview
run(stories);
ExternalsFactory
Позволяет задавать поведение и логирование по умолчанию для внешних зависимостей приложения.
createExternals
Основная фабрика, инициализирующая внешние зависимости приложения. Принимает StoryConfig.
createPreviewApp({
createExternals: () => {
// Данное поведение будет использоваться по умолчанию в историях
getUser: async () => DEFAULT_USER;
},
/* ... */
});
createJournalExternals
Помечает функции в объекте externals, которые должны отслеживаться по умолчанию. После того как функция
помечена как записываемая, это действие нельзя отменить.
Принимает итоговый externals и StoryConfig.
createPreviewApp({
createJournalExternals: (externals, config) => ({
...externals,
getUser: config.journal.asRecordable(externals.getUser),
}),
});
run
Помимо фабрики тестов, возвращает функцию run, необходимую для запуска превью. Принимает
массив историй.
const { run, it } = createPreview(/* ... */);
run([
it('works', {
render: (externals) => <App externals={externals} />,
}),
]);
Расширения
@storyshots/react дополнительно расширяет фабрику it следующими методами:
render
Представляет собой само тестируемое поведение (для react приложений в частности, возвращает дерево компонентов для отрисовки).
Принимает externals и StoryConfig:
it('...', {
// Отрисовывает компонент UserProfile, используя подготовленные данные из externals.
render: (externals) => <UserProfile externals={externals} />,
});
previewing
@storyshots/react расширяет StoryConfig добавляя новое свойство previewing, которое указывает режим, в котором
запущена история.
true: История запущена в режиме preview.false: История выполняется как тест в фоновом агенте.
Данное свойство полезно для контроля внешней среды. Например, анимации должны быть активны в режиме предпросмотра (для более наглядной разработки), но быть выключенными в режиме запуска тестов для исключения недетерминированного поведения.
arrange
Подготавливает внешние зависимости для истории.
Эта функция используется для подготовки окружения перед запуском истории.
it('...', {
arrange: (externals) => ({
...externals,
// Для текущей истории установить определённое поведение метода.
getUser: async () => ({ name: 'John Doe', age: 25 }),
}),
});
Принимает конфигурацию истории как второй аргумент.
Может также использоваться для разметки методов для логирования с помощью [Journal]/API/test-components/story-config#journal:
it('...', {
arrange: (externals, { journal }) => ({
...externals,
getUser: journal.asRecordable('getUser', externals.getUser),
}),
});
Также может использоваться для хранения временного состояния в контексте истории:
it('...', {
arrange: (externals) => {
// count сохранится в контексте работающей истории.
const count = 0;
return {
increment: () => (count += 1),
get: () => count,
};
},
});