Taro.js 2.x Тестирование утилит: Просто и эффективно
Taro-testing-library — это набор утилит для тестирования Taro.js, которые способствуют внедрению лучших практик тестирования.
Установка
// с помощью yarn
yarn add taro-testing-library -D
// или с помощью npm
npm install taro-testing-library -D
Для Taro 3.x и React можно использовать react-testing-library напрямую. Требуется только настроить moduleNameMapper в jest.config.js следующим образом:
{
moduleNameMapper: {
'@tarojs/components': '@tarojs/components/dist-h5/react',
...
},
}
Использование
В файле конфигурации jest установите preset на «taro-testing-library»:
{
"preset": "taro-testing-library"
}
API
render(Component, { container, target }) => { container, unmount, rerender } — метод рендеринга для монтирования компонента.
Результат:
renderToString(Component) => string — экспорт из nerv-server, который можно использовать для сопоставления снимков.
cleanup() автоматически вызывается после каждого теста, если тестируемый фреймворк поддерживает afterEach (например, mocha, Jest, Jasmine). Однако вы можете пропустить автоматическую очистку, установив переменную среды TTL_SKIP_AUTO_CLEANUP в значение «true».
Чтобы упростить задачу, вы также можете просто импортировать taro-testing-library/dont-cleanup-after-each, что сделает то же самое.
Демо
Компонент:
import Taro, { useState } from '@tarojs/taro';
import { Text } from '@tarojs/components';
const Counter = (props) => {
const { initial = 1 } = props;
const [count, setCount] = useState(initial)
return (
<Text onClick={() => {setCount(count+1)}} className="number">
{count}
</Text>
);
};
Тест:
import Taro from '@tarojs/taro';
import { act, render } from 'taro-testing-library';
test('должен отображать компонент', () => {
const { container } = render(<Counter />);
const $number = container.querySelector('.number');
expect($number.innerHTML).toEqual('1');
});
test('должен повторно отображаться при срабатывании хуков setState', () => {
const { container } = render(<Counter />);
const $number = container.querySelector('.number');
act(() => {
$number.click()
})
expect($number.innerHTML).toEqual(`2`);
});
it('должен поддерживать снимок', () => {
const component = renderToString(<div>компонент без состояния</div>);
expect(component).toMatchSnapshot();
})
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )