Автоматически запускать определенные тесты при смене файла?

Я ищу способ автоматического запуска определенных тестов при изменении определенных файлов, аналогично тому, что вы можете сделать с Guardfile в Ruby on Rails . Мне было интересно, есть ли способ сделать это с Laravel Elixir или с gulp (Ie gulpfile.js )

Вот пример того, что я ищу:

watch('^app/Http/Controllers/(.+)(Controller)\.php$', function($match) { return ["tests/{$match[1]}"]; }); watch('^app/Policies/(.+)(Policy)\.php$', function($match) { return ['tests/' . str_plural($match[1])]; }); watch('^app/User.php$', function($match) { return [ 'tests/Admin', 'tests/Auth', 'tests/Users', ]; }); 

Вы можете сделать это с grunt и несколькими плагинами, если это вариант для вас. Я делаю это для PHP, javascript и исходных файлов CSS, и это работает.

Пример файла grunt, обрезанный:

 module.exports = function(grunt) { grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), watch: { grunt: { files: ['Gruntfile.js'] }, php: { files: ['src/**/*.php'], tasks: ['phpunit'] } }, shell: { phpunit: 'phpunit --testsuite Unit' // or whatever } }); grunt.loadNpmTasks('grunt-contrib-watch'); grunt.loadNpmTasks('grunt-shell'); grunt.registerTask('phpunit', ['shell:phpunit']); }; 

Вам понадобятся ворчащие ролики и хрюканье

Теперь он будет запускать phpunit любое время в php-файле в src/ изменениях, если у вас есть задание на работу в фоновом режиме. Конечно, вы можете ограничить и изменить файлы, которые вы слушаете, с шаблонами регулярных выражений в разделе файлов задачи просмотра.

РЕДАКТИРОВАТЬ:

Чтобы запускать определенные тесты на основе определенного изменения файла, а не подстановочного-обновления-все, у вас будет следующее:

 watch: { grunt: { files: ['Gruntfile.js'] }, UserSrc: { files: ['app/**/UserController.php'], // The ** matches any no. of subdirs tasks: ['UserControllerTests'] } }, shell: { userTests: 'phpunit tests/User' // To run all tests within a directory, or: //userTests: 'phpunit --testsuite UserController // to run by testsuite } } // ... Other config grunt.registerTask('UserControllerTests', ['shell:userTests']); // ... more tasks 

Использование наборов тестов – лучший способ использования, если ваши пользовательские тесты охватывают несколько каталогов. Поэтому, если вы хотите запускать все тестовые файлы в тестах / Users и tests / Auth и т. Д., У вас будет testuite в вашем файле phpunit.xml, который будет запускать их. Что-то вроде:

 // ... <testsuite name="UserController"> <directory suffix="Test.php">tests/Users</directory> <directory suffix="Test.php">tests/Auth</directory> // .. Other directories </testsuite> // ...