#javascript #reactjs #jestjs #react-testing-library
#javascript #reactjs #jestjs #реагировать-тестирование-библиотека
Вопрос:
Я давно не проводил никаких шуток или тестов, и я борюсь с этим тестом. У меня есть этот компонент button, в котором значение атрибута disabled берется из хранилища redux. Когда пользователь входит в систему, я делаю вызов серверной части и сохраняю некоторые данные в хранилище redux, а затем во время просмотра, если пользователь попадает на эту конкретную страницу. Я считываю данные из хранилища, модифицирую их для создания объекта, а затем передаю его кнопкам.
В моем компоненте есть эти две кнопки material-ui.
<Button onClick={handleClick} disabled={!permissions.admin|| !permissions.moderator} id="btn-reports">Reports</Button>
<Button onClick={handleClick} disabled={!permissions.admin|| !permissions.moderator} id="btn-charts">Charts</Button>
Родительский компонент генерирует значение объекта разрешений из вспомогательной функции getPermissions (ниже), считывающей состояние непосредственно из хранилища.
const getPermissions = () => {
const permissions = store.getState().permisisons;
const accessToButtons = {
admin: false,
moderator: false
}
for(const permission of permissions) {
if (permission.admin === true) {
accessButtons.admin = true;
} else if (permission.moderator === true) {
accessButtons.moderator= true;
}
}
return accessToButtons;
}
Прямо сейчас я получаю сообщение об ошибке при запуске jest, потому что кнопка отключена. Я считаю, что по умолчанию она имеет значение false, и я пытаюсь написать тест для проверки onclick, который завершается неудачей. У меня есть вспомогательная функция для handleDisabled, где я перебираю объект в хранилище и на основе этой кнопки отключен. Может ли кто-нибудь подсказать мне, что мне нужно здесь сделать? Как мне издеваться над функцией, предоставляя некоторые фиктивные значения для этого объекта, чтобы у меня был контроль над отключением / включением этих кнопок.
Я поиграл с jest.fn
и jest.spyOn
, но мне не повезло.
Спасибо.
Комментарии:
1. Итак, я решил эту проблему, добавив jest.spyOn(newlyCreatedObjectWithGetPermissions, getPermissions).mockReturnValue(mockPermissonsObject), а затем, конечно, permissonsObject имеет {admin: true, moderator: false} . Это правильный путь?
2. Я бы сказал, что с RTL чем больше вы можете взаимодействовать с тестируемым компонентом, тем лучше для кода приложения / пользовательского интерфейса и пользователя. Я не думаю, что вы должны получать состояние непосредственно из хранилища, как у вас
getPermissions
, но обычно у вас есть компонент, «подписывающийся» на контекст redux, предоставляемый приложению … просто создайте оболочку mock redux provider для тестируемого компонента. Если вы все еще используетеconnect
HOC, экспортируйте и протестируйте неподключенный компонент и просто издевайтесь над реквизитами, которые будут сопоставлены с redux.