Модульное тестирование CSS

Несколько быстрых поисков обнаружили, что я, очевидно, непервое лицо, чтобы иметь мысль «Могу ли я провести модульное тестирование своего CSS?».

Мне интересно, успешно ли кто-нибудь здесь приступил к модульному тестированию CSS? Если вы пытались и потерпели неудачу, или просто имеете свои собственные теории, скажите, пожалуйста, почему это (по-видимому) еще не сделано?

Комментарии о том, что он не полон по Тьюрингу, не тестируется по модулю и т. д., Просто отстой. Например, наследование (каскадирование) в css - это то, что было бы очень интересно проверить. Также интересно проверить кроссбраузерные настройки. И селен, или любое другое решение в браузере не похоже на то, что оно может работать. Если, может быть, он не основан на чем-то вроде qunit / jquery и фактически подталкивает DOM, чтобы увидеть, применяется ли CSS так, как задумал автор (и может быть запущен / протестирован в разных браузерах для проверки его работы).

Evgeny 27.01.2011 20:45

Включение проверок CSS в тесты может помочь подтвердить некоторые бизнес-требования в BDD (например, размер чего-либо NxN и синий). Эти типы вещей, безусловно, можно протестировать, даже если их появление в пользовательском агенте X не соответствует указанным требованиям (именно здесь что-то вроде селен может заполнить пробелы)

Kevin Peno 07.05.2013 21:56

Для меня это звучит как пустая трата времени.

Crasher 16.01.2021 20:15
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
64
3
21 894
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

Ответ принят как подходящий

Вы можете использовать Selenium, фреймворк для веб-тестирования. Таким образом вы можете утверждать, какие стили будут применяться к элементам в DOM и т. д.

Селен

В противном случае не уверен, какова ваша цель. Модульное тестирование - это, как следует из названия, тестирование «модулей», и для меня это имеет смысл только с кодом, а не css.

ну, CSS - это код, ... вроде как. В любом случае, изменение ввода (файл CSS) изменит вывод (визуальные эффекты), и я хотел бы сделать утверждения о выводе - проверка того, что размер шрифта в абзацах никогда не отличается - проверка того, что текст выровнен по сетке правильно и т. д.

nickf 05.12.2008 04:21

Для этого вам нужен селен. И просто для ясности. CSS - это не код :-), это не язык программирования и никоим образом не Turing Complete, это описательный язык для визуального оформления XML-документов.

RekrowYnapmoc 05.12.2008 04:31

Это не язык программирования. Но это код. Так же, как HTML - это код.

slim 05.12.2008 18:36

Опять же, извините, что не согласен. Код - это нечто, выполняемое машиной. HTML - это разметка.

RekrowYnapmoc 06.12.2008 00:07

Хорошо, вы выбрали очень узкое определение «кода». По этому определению C в ASCII не имеет смысла.

slim 06.12.2008 21:51

Собственно CSS3 является (возможно) по Тьюрингу завершен :)

Michael Mior 25.04.2013 23:35

Я думаю, что вопрос правильный, например, когда CSS сочетается с JavaScript, стили текста и положение элементов могут изменяться в различных сценариях, поэтому он гарантирует необходимость наличия теста, чтобы убедиться, что стиль действительно правильный для данного сценария

Jasdeep Khalsa 20.06.2013 12:29

Независимо от того, какое определение у нас есть о CSS. Практический вопрос по этому поводу: можно ли протестировать с помощью автоматизированных задач? Я думаю, что мы могли бы проверять окончательные состояния элементов DOM, проверяя значения окончательных атрибутов CSS. Этого можно добиться с помощью модульного тестирования javascript <-> CSS.

Heroselohim 21.07.2014 18:16

«Код - это нечто, выполняемое машиной». Haskell, HTML и CSS интерпретируются и выполняются машиной. en.wikipedia.org/wiki/Declarative_programming

Todd Chaffee 26.04.2018 22:38

В настоящее время понимание того, правильно ли работает CSS, определяется визуально. Пока что лучший способ проверить это - установить несколько браузеров на вашем компьютере разработчика. Начните использовать такие инструменты, как Firebug и Web Developer в Firefox, и забудьте о модульном тестировании CSS, пока оно не станет завершенным по Тьюрингу. :-)

И после того, как вы установили несколько браузеров на свой компьютер разработчика, вы можете визуально определить, если CSS работает правильно ... Selenium - это способ автоматизировать это визуальное определение.

Greg 22.10.2013 19:24

Вы можете использовать PhantomCSS для автоматического визуального сравнения. А затем вы можете создать страницу модульного теста модуля CSS, которая загружает только базовые стили CSS и отображает компонент во всех его состояниях, но не загружает CSS из других компонентов. А затем вы можете сравнить его с полным файлом CSS со всеми загруженными модулями.

Я не понимаю, почему мы не можем или не должны проводить модульное тестирование CSS. Вот сценарий, который я имею в виду:

У меня есть CSS-фреймворк, который состоит из нескольких модульных CSS-файлов и управляет 5 моими сайтами.

Ex : base.css / form.css / article.css etc.

Представьте, что я вношу изменения в base.css для требования, относящегося только к Сайту №1 => Я могу нарушить стиль Сайта №2 без него.

Модульный тест CSS был бы еще более уместным, если бы мой фреймворк CSS был построен на основе LESS или SASS: изменение макроса может нарушить все стили. .

Да, у меня также есть несколько базовых таблиц стилей CSS для многих сайтов. Но также у каждого из них есть собственные файлы CSS, чтобы сделать их уникальными. С помощью пользовательских файлов CSS вы можете переопределить стили по умолчанию, а также включить / отключить их.

Heroselohim 21.07.2014 19:30

Думаю, можно было бы в браузере (на стороне клиента) провести «модульное тестирование» CSS. Это было бы больше похоже на автоматическую проверку, чем на модульное тестирование:

  1. Оцените окончательные условия атрибута CSS, которые мы хотели бы сохранить для определенного класса или идентификатора CSS (результат).
  2. Нам нужен тестовый документ HTML для рендеринга статического содержимого и CSS. Все элементы должны быть включены в контент в отдельных контейнерах.
  3. После рендеринга проверьте с помощью javascript конечные или результирующие конечные атрибуты выбранных целей и выведите несовпадающие элементы.

Пример модульного тестирования:

Селекторы DOM:

.test1
.test2
#test3

Это всегда должны быть последние атрибуты:

CSSAttribute1, CSSFinalValue1
CSSAttribute2, CSSFinalValue2
CSSAttribute3, CSSFinalValue3

Функция для установки правил тестирования в JS может быть:

addCSSUnitTest(".test1, .test2, #test3", "margin-left: 4px; font-size: 8px");

Затем мы проверяем, имеют ли элементы DOM эти final атрибуты.

Все делается на javascript после рендеринга. Но в любом случае это непрактично, потому что вам придется создать множество модульных тестов, которые значительно увеличат ваш код.

Также у вас всегда должен быть reset.css для кроссбраузерной «совместимости».

альтернатива будет обозначать классы CSS, которые, как вы знаете, должны сохранять все свои атрибуты. Создайте список селекторов DOM. Используйте jQuery для получения атрибутов класса CSS (непосредственно из класса CSS) и проверьте, сохраняются ли они в целевых элементах DOM. Этот последний метод можно почти полностью автоматизировать, но он потребует более сложной проверки JavaScript. Последний не будет проверять CSS на наличие селекторов идентификаторов (например, "# test3"), только классы (например, ".test1").

Есть интересный подход, который я никогда не пробовал, но может сработать:

  1. Вы создаете образцы страниц (а-ля https://getboostrap.com) со всеми компонентами и т. д.
  2. Вы тестируете с Хаксли

И вуаля :)

Есть новая библиотека модульного тестирования css под названием Дон Кихот. Вместо того, чтобы сравнивать изображения визуально, он смотрит на код. В отличие от Selenium, вам не нужно утверждать определенные стили, вместо этого вы можете сказать что-то вроде «он должен быть по центру» или «левая сторона должна быть на 10 пикселей правее этого другого элемента».

интересно, пробовали ли вы уже «Кихот». Если да, не могли бы вы поделиться некоторыми подробностями о своем опыте?

leenasn 21.01.2015 20:28

У меня нет, но я хочу попробовать.

aharris88 22.01.2015 01:08

Мы настроили модульные тесты для большого проекта с тяжелым пользовательским интерфейсом, и он отлично сработал! К тому же это было намного проще, чем кажется.

Возьмите простые инструменты, такие как getBoundingClientRect или getComputedStyle, соедините их с гипертекст, чтобы быстро создать временные деревья DOM, и все готово. Мы написали лента-css, чтобы уменьшить количество шаблонов при тестировании с Лента, но стек будет аналогичным в любой тестовой установке.

Вчера я опубликовал подробный пост в блоге с простым руководством и живыми примерами нашего нового рабочего процесса и того, как он повысил нашу продуктивность: Как модульные тесты CSS помогли нам быстро развиваться.

Модульное тестирование CSS зависит от вашего фреймворка и вашего подхода к CSS.

Вопросы, которые нужно задать:

Тестирование заданного класса в вашем CSS например, Assert.IsNotNull

Получите свойство CSS и проверьте его атрибуты.

Во-первых, я хотел бы убедиться, существует ли файл CSS, затем искать конкретный класс, а затем искать атрибуты внутри указанного класса.

Во время регрессионного теста я обнаружил пропущенный класс, и мне удалось сразу исправить его на основании предыдущих выводов.

Другие вопросы по теме