簡體   English   中英

在更改時運行PHPUnit測試

[英]Run PHPUnit tests on change

每當文件在磁盤上發生變化時,我都想運行我的PHPUnit測試(或者至少是它們的一部分)。 非常類似於“ grunt watch ”所能做的。 我有一個項目,我有JS和PHP,並使用Grunt。 在那里我向PHPUnit發出請求,讓它在我使用grunt watch的JS測試之上運行。 雖然這樣做很好,但在僅PHP項目中執行此操作似乎非常麻煩。 我需要引入grunt,並在節點上添加依賴項。 另外,我有很多這樣的PHP項目。 因此,更簡單的解決方案是有序的。

你可以使用很甜的節點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

(歸功於這篇有趣的文章

我前段時間寫了一篇博文: 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文件的更改

使用inotifywait和bash腳本執行此操作的簡單方法:

#!/bin/bash
while true; do
  FILE=$(inotifywait --exclude=".*.*sw*" --exclude="4913" ./ --format "%w%f" -e close_write) &&
  clear &&
  phpunit --color $FILE
done

然后你就可以在一個終端(或者你想要的話)中運行它並且你很好。 我正在運行tmux,所以我只是設置了一個堆疊的窗格,有一個小窗口可以查看我的測試結果。 只需在測試所在的目錄中運行此腳本即可。

對我來說效果很好。

此外,此腳本是Vim友好的(Vim創建一個文件,4913,在保存期間,此腳本忽略它)。

它完全受到網絡各個地方的啟發 - 甚至可能來自其中一些答案。

也許你可以嘗試phpunit-watcher https://packagist.org/packages/spatie/phpunit-watcher

首先,安裝帶有composer require spatie/phpunit-watcher --dev phpunit-watcher composer require spatie/phpunit-watcher --dev ,然后修改composer.json以在scripts屬性中添加一個項:

{
    "scripts" : {
        "test" : "./vendor/bin/phpunit-watcher watch --bootstrap vendor/autoload.php tests/"
    }
}

然后,您可以使用: composer test運行composer test

有時,你應該運行composer run test --timeout=0 ,否則進程將在300秒后被殺死。

安裝grunt並使用https://github.com/SaschaGalley/grunt-phpunit

然后你用watch任務設置phpunit任務。 這就是我現在這樣做的方式。

在PHPStorm中,您可以配置文件監視器,它將在文件修改時為您執行shell命令。 例如,您可以擁有一個將在php文件修改時觸發的文件監視器,並將使用所有必需的命令運行phpunit命令。

有關File Watchers的更多信息,請訪問JetBrains網頁幫助頁面: https//www.jetbrains.com/phpstorm/webhelp/using-file-watchers.html

我已經創建了一個解決這個問題的解決方案:“ 改變了什么? ”簡而言之,有些情況下你有一些非常大的測試套件而你只想運行與已經改變的類相關的測試。

您可以通過運行composer require --dev icyapril/whats-changed來通過composer將其拉入

有了這個,只需運行./vendor/bin/whatschanged ,只運行上次提交或工作目錄中更改的文件。 魔法!

什么改變成功運行

您可以使用inotifywait ,有關PHPUnit示例,請參閱https://speakerdeck.com/rowan_m/building-better-developers-2?slide=31

我找到了phpunit-testrunner節點包,這對我的問題有用。 每個PHP項目一個配置json文件,然后可以由安裝了節點包的任何人使用。 也跨平台。 仍然需要節點,因此不是理想的解決方案。

我發現這個解決方案使用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 / App是所有源代碼的路徑

如果添加擴展名,則在默認任務中添加此行

gulp.watch( 'my_project_name / /*.otherext',[ 'PHPUnit的']);

編輯php文件后運行phpunit測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM