Я хочу запустить мои тесты PHPUnit (или, по крайней мере, их подмножество) всякий раз, когда файл изменяется на диск. Очень похоже на то, что вы можете сделать с помощью grunt watch". У меня есть проект, в котором у меня есть как JS, так и PHP, и я использую Grunt. Там я выкладываю в PHPUnit, чтобы он работал поверх моих тестов JS, используя часы grunt. Хотя это работает очень хорошо, кажется, что это ужасно много хлопот, чтобы сделать это в проекте только PHP. Мне нужно ввести grunt и добавить зависимость от node. Плюс у меня много таких проектов PHP. Таким образом, более простое решение имеет смысл.
Запуск тестов PHPUnit при изменении
Ответ 1
Я написал сообщение в блоге об этом некоторое время назад: http://edorian.github.io/2010-03-11-running-your-unit-tests-everytime-you-save-a-file/
Самая основная команда:
pywatch phpunit .
что означало бы "контролировать все файлы в этом каталоге и ниже для изменений, и если один из них изменяет выполнение PHPUnit".
Если у вас есть много файлов (активы и т.д.), которые могут замедляться, поэтому лучше/быстрее:
find -name '*.php' | xargs pywatch "./runSuite.sh"
который отслеживает только изменения .php
файлов
Ответ 2
Вы можете использовать node watch
, что довольно приятно:
Запустите npm init
, чтобы настроить пакет (занимает минуту), затем
npm install --save-dev watch
Затем отредактируйте файл package.json
, чтобы включить эти две записи:
"scripts": {
"test": "bin/phpunit tests --color",
"test:watch": "watch 'npm run --silent test' ."
},
Затем запускайте просмотр с помощью:
npm run test:watch
(кредит из-за эта интересная статья)
Ответ 3
Простой способ сделать это, используя inotifywait и bash script:
#!/bin/bash
while true; do
FILE=$(inotifywait --exclude=".*.*sw*" --exclude="4913" ./ --format "%w%f" -e close_write) &&
clear &&
phpunit --color $FILE
done
Затем вы просто запускаете это в терминале (или, как вам угодно), и вы хороши. Я запускаю tmux, поэтому у меня только что установленная панель с небольшим окном, чтобы увидеть результаты моих тестов. Просто запустите этот script в каталоге, в котором живут ваши тесты.
Хорошо работает для меня.
Кроме того, этот script является Vim дружественным (Vim создает файл, 4913, во время сохранения, этот script игнорирует его).
Это было полностью вдохновлено из разных мест в Интернете - возможно, даже из некоторых из этих ответов.
Ответ 4
Установите grunt и используйте https://github.com/SaschaGalley/grunt-phpunit
Затем вы должны настроить задачу phpunit под задачей просмотра. Вот как я это делаю прямо сейчас.
Ответ 5
В PHPStorm вы можете настроить File Watcher, который будет выполнять команды оболочки для вас при модификации файлов. Например, у вас может быть один файловый наблюдатель, который будет запускаться при изменении файла php и будет запускать команду phpunit со всеми необходимыми командами.
Подробнее о файловых наблюдателях можно найти на веб-странице справки JetBrains: https://www.jetbrains.com/phpstorm/webhelp/using-file-watchers.html
Ответ 6
Я создал решение для решения этой самой проблемы: " Что изменилось?" Короче говоря, бывают случаи, когда у вас есть некоторые действительно большие тестовые пакеты, и вы хотите только запустить тесты, относящиеся к классам, которые изменились.
Вы можете выполнить это через композитор, выполнив composer require --dev icyapril/whats-changed
С помощью этого на месте просто запустите ./vendor/bin/whatschanged
, и будет запущен только файл, измененный в вашей последней фиксации или в вашем рабочем каталоге. Магия!
Ответ 7
Вы можете использовать inotifywait
, см. https://speakerdeck.com/rowan_m/building-better-developers-2?slide=31 для примера PHPUnit.
Ответ 8
Я нашел пакет phpunit-testrunner node, который подходит для моей проблемы. Один файл конфигурации json для PHP-проекта, который затем может использоваться любым, у которого установлен пакет node. Также перекрестная платформа. Тем не менее требуется node, хотя это не идеальное решение.
Ответ 9
Я нашел, что это решение использует node + gulp
0. install node
1. npm init
2. npm install gulp --save-dev
создайте gulpfile.js и поместите это
var gulp = require('gulp'),
util = require('util'),
exec = require('child_process').exec;
gulp.task('phpunit', function() {
exec('phpunit -c my_project_name/App', function(error, stdout) {
util.puts(stdout);
});
});
gulp.task('default',['phpunit'], function() {
gulp.watch('my_project_name/**/*.php', ['phpunit']);
});
my_project_name/Приложение - это путь ко всему исходному коду
если добавление расширения добавляет эту строку в задачу по умолчанию
gulp.watch('my_project_name//*. otherext', ['phpunit']);
после редактирования php файла запустите тест phpunit