Grunt-cli и Travis


На днях Вадим Макеев написал, как он запускает тесты грантом в Тревисе — указав в package.json такую строчку:

"scripts": {
  "test": "node -e \"require('grunt').tasks(['test'])\""
}

Это, конечно работает, но мне не кажется разумным выполнять eval в node-процессе. Попахивает <a href="javascript://"></a>, поэтому я считаю, что лучше делать иначе.

А в чём, собственно проблема? Интерфейс командной строки к гранту, grunt-cli рекомендуется ставить глобально. Поэтому его нет в зависимостях для пакета и тревис не может запустить тесты.

Простым решением будет отказаться прописать grunt-cli в devDependencies и запускать тесты командой ./node-modules/grunt-cli/bin/grunt test<code>. Но в этом случае все, кто решит поставить дев-версию проекта у себя будут вынуждены тянуть grunt-cli, и велик шанс нарваться на конфликт версий локального и глобального грантов, например (тут я не совсем компетентен и могу ошибаться).</code>

Более правильным способом будет поставить grunt-cli глобально в виртуалке Тревиса, и это очень просто сделать. Открываем файл .travis.yml нашего проекта и добавляем в него секцию, отвечающую за подготовку окружения перед запуском тестов:

before_script:
  - npm install -g grunt-cli

Вот и всё, теперь можно запускать тесты командой grunt test везде. И у разработчика, и в Тревисе.