SlimerJS
― это Firefox
для автоматических тестов или же каких-либо подручных задач. PhantomJS
― это webkit
браузер без окна, для тех же целей. CasperJS
― это test-кит, обёртка над PhantomJS
и SlimerJS
. До недавнего времени CasperJS
был присмерти, основной разработчик на него забил и никто проектом не занимался. Но судя по коммитам дело сдвинулось с мёртвой точки, и проект скорее жив, чем мёртв. Появилась поддержка свежих версий PhantomJS
, которую я так давно ждал.
PhantomJS
С ним у меня возникло множество проблем. Дело в том, что webkit
в нём очень древний. Он не способен переварить less.js,
нуждается в CSS-префиксах
к flexbox
, не знает ничего о Function.Prototype.bind
. В общем less
приходится билдить в CSS
, а для JS
пихать es5-shim
и babel-polifill
. Про ES2015
молчу :-)
Стабильностью не страдает, и регулярно падает с PhantomJS has crashed
, без объяснения причин. Плохо дружит с jQuery.IndexedDB
, с некоторой периодичностью выкидывая ошибки.
Не имеет собственного окна, что сильно затрудняет отладку тестов или персональных косяков его самого. Но умеет скриншоты, что несколько выручает. А ещё мне пока не удалось завести в нём contenteditable
(обновился до 2.1 и завелось).
Касательно работы через CasperJS
… Почему-то запускает только 1-ый тест в файле. Много отличий в работе с require
по сравнению со SlimerJS
. Если ваша тестовая база подбита под SlimerJS
, то потребуется много работы напильником, прежде чем тесты хотя бы запустятся.
CSS
. Свежие версии фантома умеют зачатки flexbox
-а. С префиксом -webkit
и сильно устаревшими свойствами. По сути половину не умеет. Насколько я понял, исходя из беглого поиска, там QWebKit 2.2
, который сильно устарел. Его возможности примерно равны Safari 5.1
. Открыл я в ней проект… поковырялся, понял что безнадёга полнейшая и пришлось от фантома отказаться. Буду ждать обновлений.
В отличии от SlimerJS
, фантом умеет падать с правильным exit code
, а также умеет работать по file://
протоколу с AJAX
запросами, что очень удобно для frontend
тестирования.
Отладка. Если кратко ― ад. К примеру console.log
для объектов выводит [Object object]
. Любит при eval
уходить в вечные циклы. Stacktrace-ы
выдаёт далеко не всегда. Если запускаемый файл содержит ошибки синтаксиса ― где именно не укажет. Ну и т.д… Обычно причину приходится искать методом проб и ошибок.
UPD: отдельные граблки это то каким образом casperJS
гоняет данные между тестом
и страницей
. В случае slimerJS
, главное чтобы эти данные могли сериализовываться, к примеру, JSON
-ом. В случае phantomJS
начинаются какие-то чудеса с null
и похожими значениями. Разбираться в чём дело я не стал, а критичные к таким багам данные стал вручную перед отправкой перегонять в JSON-строку
, а в тесте уже распаковывать.
SlimerJS

В отличии от фантома не умеет работать без окна. В Linux
эту проблему можно решить, к примеру, так: xvfb-run %команда%
, без каких-либо побочных эффектов.
Очень многие вещи, такие как require
, понимает не так, как их понимает PhantomJS
. По сути то тут, то там, приходит ставить условие phantom.casperEngine === ‘slimerjs’
, что сильно поело нервов.
В отличии от фантома умеет кое-что и из ES2015
, и никакие shim-es5
ему не нужны. Без труда переварил less.js
. Отлично справился с flexbox
-ом.
Пока не умеет опции –web-security=no
, что не позволяет нормально тестировать по file://
протоколу, т.к. не проходят AJAX
запросы.
Всегда завершает скрипт с кодом 0
, что создаёт проблемы в определении, провалился ли тест, или был успешен, к примеру, из grunt
-задачи.
Отладка примерно столь же ужасная, что и в фантоме. Тоже умеет скриншоты.
CasperJS

Располагает интересным API. К примеру может загружать файл в input[type=file]
, умеет [contenteditable]
и курсоры
. Умеет дожидаться появления или исчезновения HTMLElement
-а по его selector
-у и многое другое.
Но требует слишком много возни с подключением скриптов, сами тесты приходится писать без ES2015
возможностей. Располагает ужасной отладкой. API
не связанное с самими web-страницами
очень проблематично работает, к тому же по разному в зависимости от движка. К примеру, подключить к тесту какой-нибудь lodash
может оказаться непростой задачей.
Test-kit
очень сильно отличается от привычных мне подходов (таких как в mocha
). Я так и не понял, как удобно организовать большие и сложные тесты. Вывод в консоль в итоге напоминает какой-то хаос.
Резюмируя
Инструментарий есть, но он ужасен. Требует очень большого и длительного внимания. Работает весьма нестабильно. По сути это сплошная головная боль. А сами проекты почти не развиваются. Увы.
Плагин для grunt
, оказался чуть менее, чем никаким, ввиду чего пришлось писать собственную реализацию, которая пока тоже далека от желаемой.