Skip to content
This repository has been archived by the owner on May 9, 2021. It is now read-only.

Explicit html id based parsing for non-prod invironment #34

Closed
dhilt opened this issue Oct 24, 2017 · 16 comments
Closed

Explicit html id based parsing for non-prod invironment #34

dhilt opened this issue Oct 24, 2017 · 16 comments
Assignees

Comments

@dhilt
Copy link
Owner

dhilt commented Oct 24, 2017

  1. Все инструкции вида wrapper.find('h3').text() должны быть заменены на поиск по id. Для этого нужно разбросать по разметке id-атрибуты вида id="dharmadict.test.TranslatorPage.name" (это конкретно пример для <h3>{translator.name}</h3> из компонента TranslatorPage).

  2. Нужно дополнить prod-сборку процедурой по вырезанию из разметки всех id-атрибутов, начинающихся с "dharmadict.test."

@dhilt dhilt mentioned this issue Oct 24, 2017
@dhilt dhilt changed the title Explicit html parsing for non-prod invironment Explicit html id based parsing for non-prod invironment Oct 24, 2017
@dyuvzhenko
Copy link
Collaborator

dyuvzhenko commented Oct 25, 2017

@dhilt Пока что никак не могу смекнуть как из prod-сборки из id убирать "dharmadict.test".

@dhilt
Copy link
Owner Author

dhilt commented Oct 25, 2017

@bitden Посмотри https://stackoverflow.com/questions/43934210/remove-html-attribute-in-production-build и в частности https://www.npmjs.com/package/babel-plugin-react-remove-properties возможно наш случай.

Хотя, глядя на это более подробно, может быть имеет смысл переделать это с простого id на test-id. Тогда подойдет и https://www.npmjs.com/package/babel-plugin-react-remove-properties https://www.npmjs.com/package/babel-plugin-remove-object-properties. И значение будет проще:

  <h3 test-id="TranslatorPage.name">{translator.name}</h3>

@dyuvzhenko
Copy link
Collaborator

dyuvzhenko commented Oct 26, 2017

@dhilt Так, в общем начал пытаться применить вышеописанные библиотеки (что показывает возможно в корне неверный код в webpack-конфиге) и столкнулся собственно с тем, что при prod-сборке проекта тег test-id исчезает сам собой. Но в тестах, и при запуске dev-сервера консоль начинает бросать ошибки Unknown prop 'test-id' on <h1> tag (которые вроде не мешают приложению продолжать работать). Вероятно, эти библиотеки по удалению/изменению id не понадобятся?
Сделал небольшой пример как это все выглядит с NotFound - 199d25a.

@dyuvzhenko
Copy link
Collaborator

dyuvzhenko commented Oct 26, 2017

И пока что остается загадкой, как бы в отдельном порядке тестировать <FormattedMessage />. test-id ему передать не выходит, также как и обычный id.

@dhilt
Copy link
Owner Author

dhilt commented Oct 26, 2017

@bitden Попробуй заменить на data-test-id. Атрибуты, начинающиеся с data-, должны считаться валидными. И из тестов нужно убрать привязку к тегу, оставить только атирибут, то есть [test-id="NotFound.headind"] вместо h1[test-id="NotFound.headind"]. Это возможно?

@dyuvzhenko
Copy link
Collaborator

dyuvzhenko commented Oct 26, 2017

@dhilt Заменил, все валидно и здорово - 55aedc2. И может нет смысла писать в data-test-id название компонента? В тестах мы компонент загружаем по одному и путаницы с одинаковыми id с разных компонентов быть не должно.
Писать [data-test-id="heading"] можно, и на примере TranslatorPage (55aedc2) можно без указания тега находить все нужные теги по data-test-id. Но такие дела почему-то не работают со ссылкой, тегом <a/>. Тесты заявляют что находят сразу два элемента, хотя в верстке data-test-id навешен только ссылке.

@dyuvzhenko
Copy link
Collaborator

@dhilt Ну и да, как я говорил, код в webpack'e оказался неверным, над этим предстоит еще поломать голову похоже.

@dhilt
Copy link
Owner Author

dhilt commented Oct 26, 2017

@bitden Нужно исследовать, какие именно два находятся в тесте. Возможно это все же кусок дочернего компонента?

Кроме этого, я конечно не против сокращения значения data-test-id, если у нас тестирование идет покомпонентно. Я просто мыслил полноценным end-to-end, где движок ходит по сайту, полностью эмулируя действия пользователя. В этом случае без привязки к компоненту (экрану, либо другой "большой" сущности) может быть трудно.

Так а что у нас со сборкой не так? В чем это выражается?

@dyuvzhenko
Copy link
Collaborator

dyuvzhenko commented Oct 26, 2017

@dhilt С webpack'ом дел пока не имел и не могу догадаться как библиотеку (https://www.npmjs.com/package/babel-plugin-react-remove-properties) корреткно использовать, чтобы data-test-id убрать из prod-сборки.

@dyuvzhenko
Copy link
Collaborator

@dhilt Если после отдельного покомпонентного тестирования еще будем делать и какое-то общее полноценное, разгуливающее по всему веб-приложению тестирование (так я пока что себе представляю end-to-end), то конечно переименую обратно.

@dhilt
Copy link
Owner Author

dhilt commented Oct 26, 2017

@bitden Нет-нет, не будем. Там пока не по чему разгуливать! Меня торопят с выдачей админских доступов, это означает, что мы больше не сможем накатывать db-reset, все операции сохранения/восстановления будут только через снапшоты. Но перед этим я хочу еще потратить время и убедиться в достаточной безопасности для Системы в плане администрирования третьими лицами. Это мой план на ближайшее время. К этому моменту мы должны также завершить работу по тестированию front end хотя бы в первом приближении. Мне кажется, это конец следующей недели.

@dyuvzhenko
Copy link
Collaborator

@dhilt Покомпонентное тестирование, которое начал сейчас делать - можно пожалуй быстро за пару дней сделать, если собраться. Есть только две заминки. Первая, как я уже сказал - не могу догадаться как бы библиотеку по убиранию data-test-id в webpack вписать. И вторая заминка - не выходит импортировать в тесты компонент Home (и еще некоторые), из-за импорта внутри компонента вида:

import logoPath from '../styles/images/manjushri_175x226.jpg'

@dyuvzhenko
Copy link
Collaborator

@dhilt И нужно внимательно протрясти сервер на предмет корректного Promise. В некоторых местах сыпались ошибки вида Unhandled error ....

@dyuvzhenko
Copy link
Collaborator

dyuvzhenko commented Oct 27, 2017

@dhilt Решение проблемы с импортом картинок вроде как решил - bbb1bf7. Ошибки теперь не падают, но с другой стороны и проверки картинки в src пока нет.

@dyuvzhenko
Copy link
Collaborator

@dhilt Добавил убирание объекта 'data-test-id': 4457067.
Может стоит и при не prod-сборке убирать этот объект? Тесты все равно проводятся независимо от сборки через webpack.

@dhilt
Copy link
Owner Author

dhilt commented Oct 30, 2017

@bitden Пусть будут!
Спасибо.

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants