Несколько быстрых поисков обнаружили, что я, очевидно, непервое лицо, чтобы иметь мысль «Могу ли я провести модульное тестирование своего CSS?».
Мне интересно, успешно ли кто-нибудь здесь приступил к модульному тестированию CSS? Если вы пытались и потерпели неудачу, или просто имеете свои собственные теории, скажите, пожалуйста, почему это (по-видимому) еще не сделано?
Включение проверок CSS в тесты может помочь подтвердить некоторые бизнес-требования в BDD (например, размер чего-либо NxN и синий). Эти типы вещей, безусловно, можно протестировать, даже если их появление в пользовательском агенте X не соответствует указанным требованиям (именно здесь что-то вроде селен может заполнить пробелы)
Для меня это звучит как пустая трата времени.






Вы можете использовать Selenium, фреймворк для веб-тестирования. Таким образом вы можете утверждать, какие стили будут применяться к элементам в DOM и т. д.
В противном случае не уверен, какова ваша цель. Модульное тестирование - это, как следует из названия, тестирование «модулей», и для меня это имеет смысл только с кодом, а не css.
ну, CSS - это код, ... вроде как. В любом случае, изменение ввода (файл CSS) изменит вывод (визуальные эффекты), и я хотел бы сделать утверждения о выводе - проверка того, что размер шрифта в абзацах никогда не отличается - проверка того, что текст выровнен по сетке правильно и т. д.
Для этого вам нужен селен. И просто для ясности. CSS - это не код :-), это не язык программирования и никоим образом не Turing Complete, это описательный язык для визуального оформления XML-документов.
Это не язык программирования. Но это код. Так же, как HTML - это код.
Опять же, извините, что не согласен. Код - это нечто, выполняемое машиной. HTML - это разметка.
Хорошо, вы выбрали очень узкое определение «кода». По этому определению C в ASCII не имеет смысла.
Собственно CSS3 является (возможно) по Тьюрингу завершен :)
Я думаю, что вопрос правильный, например, когда CSS сочетается с JavaScript, стили текста и положение элементов могут изменяться в различных сценариях, поэтому он гарантирует необходимость наличия теста, чтобы убедиться, что стиль действительно правильный для данного сценария
Независимо от того, какое определение у нас есть о CSS. Практический вопрос по этому поводу: можно ли протестировать с помощью автоматизированных задач? Я думаю, что мы могли бы проверять окончательные состояния элементов DOM, проверяя значения окончательных атрибутов CSS. Этого можно добиться с помощью модульного тестирования javascript <-> CSS.
«Код - это нечто, выполняемое машиной». Haskell, HTML и CSS интерпретируются и выполняются машиной. en.wikipedia.org/wiki/Declarative_programming
В настоящее время понимание того, правильно ли работает CSS, определяется визуально. Пока что лучший способ проверить это - установить несколько браузеров на вашем компьютере разработчика. Начните использовать такие инструменты, как Firebug и Web Developer в Firefox, и забудьте о модульном тестировании CSS, пока оно не станет завершенным по Тьюрингу. :-)
И после того, как вы установили несколько браузеров на свой компьютер разработчика, вы можете визуально определить, если CSS работает правильно ... Selenium - это способ автоматизировать это визуальное определение.
Вы можете использовать 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 вы можете переопределить стили по умолчанию, а также включить / отключить их.
Думаю, можно было бы в браузере (на стороне клиента) провести «модульное тестирование» CSS. Это было бы больше похоже на автоматическую проверку, чем на модульное тестирование:
Пример модульного тестирования:
Селекторы 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").
Есть интересный подход, который я никогда не пробовал, но может сработать:
И вуаля :)
Есть новая библиотека модульного тестирования css под названием Дон Кихот. Вместо того, чтобы сравнивать изображения визуально, он смотрит на код. В отличие от Selenium, вам не нужно утверждать определенные стили, вместо этого вы можете сказать что-то вроде «он должен быть по центру» или «левая сторона должна быть на 10 пикселей правее этого другого элемента».
интересно, пробовали ли вы уже «Кихот». Если да, не могли бы вы поделиться некоторыми подробностями о своем опыте?
У меня нет, но я хочу попробовать.
Мы настроили модульные тесты для большого проекта с тяжелым пользовательским интерфейсом, и он отлично сработал! К тому же это было намного проще, чем кажется.
Возьмите простые инструменты, такие как getBoundingClientRect или getComputedStyle, соедините их с гипертекст, чтобы быстро создать временные деревья DOM, и все готово. Мы написали лента-css, чтобы уменьшить количество шаблонов при тестировании с Лента, но стек будет аналогичным в любой тестовой установке.
Вчера я опубликовал подробный пост в блоге с простым руководством и живыми примерами нашего нового рабочего процесса и того, как он повысил нашу продуктивность: Как модульные тесты CSS помогли нам быстро развиваться.
Модульное тестирование CSS зависит от вашего фреймворка и вашего подхода к CSS.
Вопросы, которые нужно задать:
Тестирование заданного класса в вашем CSS например, Assert.IsNotNull
Получите свойство CSS и проверьте его атрибуты.
Во-первых, я хотел бы убедиться, существует ли файл CSS, затем искать конкретный класс, а затем искать атрибуты внутри указанного класса.
Во время регрессионного теста я обнаружил пропущенный класс, и мне удалось сразу исправить его на основании предыдущих выводов.
Комментарии о том, что он не полон по Тьюрингу, не тестируется по модулю и т. д., Просто отстой. Например, наследование (каскадирование) в css - это то, что было бы очень интересно проверить. Также интересно проверить кроссбраузерные настройки. И селен, или любое другое решение в браузере не похоже на то, что оно может работать. Если, может быть, он не основан на чем-то вроде qunit / jquery и фактически подталкивает DOM, чтобы увидеть, применяется ли CSS так, как задумал автор (и может быть запущен / протестирован в разных браузерах для проверки его работы).