web-dev-qa-db-fra.com

PHPUnit via Composer et PhpStorm

J'essaie maintenant depuis des heures de configurer PhpStorm pour les tests unitaires. Quoi que je fasse, je reçois ceci

Process finished with exit code 1
Cannot find PHPUnit in include path ...

PHPUnit est (via la ligne de commande) accessible de n'importe où; J'ai défini le chemin d'inclusion correct et j'ai ajouté PHPUnit aux bibliothèques externes. Aucune chance.

Est-ce possible ou ne fonctionne-t-il qu'avec des installations via PEAR? J'ai travaillé sur toutes les questions connexes ici, suis sur Mac et PHPUnit fonctionne bien via CLI.

25
shredding

Patrick Visma a posté la solution sur http://youtrack.jetbrains.com/issue/WI-13429 :

Modifiez la configuration de votre phpunit.xml dans PHPStorm et définissez les options de l'interpréteur comme ceci:

-d auto_prepend_file=/path/to/vendor/autoload.php
24
aderuwe

La réponse de @ aderuwe fonctionne mais cette configuration n'est pas étendue par projet, c'est pour tous les projets. Depuis PHPStorm 6 (en fait même la version EAP PS-126.260), vous pouvez effectuer les opérations suivantes:

  1. Accédez à File -> Settings -> PHP -> PHPUNIT.
  2. Sélectionnez Use custom loader puis entrez le autoload.php fichier depuis le répertoire du fournisseur de vos projets. Cet autochargeur chargera automatiquement toutes les dépendances gérées par Composer (y compris PHPUnit).
  3. Spécifiez le fichier de configuration par défaut (il s'agit généralement de phpunit.xml.dist du répertoire app de votre projet).

<code>PHP</code> -> <code>PHPUNIT</code>

Cela doit être répété par projet, mais les opérations suivantes doivent être effectuées une fois .

Vous devez configurer correctement vos paramètres par défaut dans PHPStorm.

  1. Accédez à Run -> Edit Configurations... ou cliquez simplement sur le menu déroulant de la barre d'outils et sélectionnez Edit Configurations....
  2. Accédez à Defaults -> PHPUnit
  3. Sous Test Scope, sélectionnez Defined in configuration file
  4. Assurez-vous que le Interpreter options le champ de texte est vide
  5. Accédez à PHPUnit (au-dessus de Defaults) et supprimez toute entrée en dessous (de sorte que la prochaine fois que vous ferez un test sur un fichier particulier, etc., il en configurera un nouveau mais en utilisant le nouveau défaut).

<code>Edit Configurations...</code>

62
Adam Lynch

Je suppose que PhpStorm repose sur la recherche de PHPUnit dans le include_path de php.ini lui-même, pas de votre projet.

Vous pouvez essayer d'ajouter le répertoire vendeur/bin de votre projet local au include_path de php.ini, mais finalement, il semble que PhpStorm pourrait bénéficier de la prise en charge de composer installe et exécute le phpunit du projet lui-même s'il est disponible. Il y a en fait un problème ouvert sur leur tracker, donc je vous recommande de vous y connecter et de le voter: http://youtrack.jetbrains.com/issue/WI-13429

5
Seldaek

Je veux ajouter que la version actuelle de PHPStorm (7.1) ne fonctionne bien qu'avec la version précédente de PHPUnit (3.7). Et il ne fonctionne pas avec 4.0 et supérieur. Si vous avez téléchargé phpunit.phar depuis http://phpunit.de , vous pouvez pointer PHPStorm vers celui-ci via Settings => PHP => PHPUnit => Path to phpunit.phar

2
Vasiliy P

J'ai constaté que si j'ai tout de moi dans le répertoire "Test", et une suite de tests définie dans un fichier de configuration "Test/phpunit.xml"; Je peux simplement configurer une "Exécuter la configuration" comme ceci:

  1. Ouvrez la boîte de dialogue Exécuter/Déboguer la configuration en cliquant sur Exécuter | Modifier les configurations.
  2. Cliquez sur + dans la barre d'outils et choisissez PHPUnit (pour les tests unitaires exécutés localement).
  3. Remplissez le Nom en haut avec ce que vous aimez.
  4. Définissez Portée du test dans le répertoire où se trouve votre test.
  5. Cliquez sur OK
  6. Exécutez ensuite la nouvelle configuration.

phpstorm-run-configuration-dialog

Boîte de dialogue Phpstorm Run | Configuration

1
b01

PHPStorm a un script de runner PHPUnit personnalisé (ide-phpunit.php) qu'il utilise en interne pour gérer les différentes versions de PHPUnit et pour faire l'intégration IDE et qui repose simplement sur le chemin d'inclusion et le PEAR disposition du dossier.

Pour ce faire, il exécute:

public static function checkIncludePath()
{
    //check include path
    $PHPUnitParentDirectory = self::getPHPUnitParentDirectory();
    if (is_null($PHPUnitParentDirectory)) {
        echo "Cannot find PHPUnit in include path (" . ini_get('include_path') . ")";
        exit(IDE_PHPUnit_Loader::FAILURE_EXIT);
    }
}

/**
 * @return null | string
 */
private static function getPHPUnitParentDirectory()
{
    $pathArray = explode(PATH_SEPARATOR, ini_get('include_path'));
    foreach ($pathArray as $path)
    {
        if (file_exists($path . DIRECTORY_SEPARATOR . 'PHPUnit/')) {
            return $path;
        }
    }
    return null;
}

Vous pouvez simplement l'installer via composer et l'ajouter en tant qu'exécutable normal (ant/phing/tâche native) mais vous perdrez toutes les fonctionnalités brillantes qu'offre PHPStorm comme la barre de progression, sautant à un échec) test et le support de couverture de code.

Donc, à partir du code, vous pouvez dire que vous devez ajouter un dossier nommé PHPUnit à l'un des emplacements de votre chemin d'inclusion. L'ajout d'un fournisseur peut être utile mais gardez à l'esprit qu'il doit correspondre à la casse lors de cette opération.

Jusqu'à ce que PHPStorm prenne en charge l'utilisation de PHPUnit à partir de composer ou un phar, je ne pense pas que vous obtiendrez une meilleure intégration ( http://youtrack.jetbrains.com/issue/WI-13429 ) en l'utilisant depuis pear mais le piratage de votre chemin d'inclusion pourrait fonctionner.

Les gars de PHPStorm ont fait quelques mises à jour sur le runner pour 3.7 et sont généralement assez réactifs aux changements dans PHPUnit :)

1
edorian