PHPUnit via Composer et PhpStorm

J'essaie maintenant pendant 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. Pas de chance.

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

24
demandé sur Pang 2012-10-10 11:35:31

6 réponses

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 D'interpréteur comme ceci:

-d auto_prepend_file=/path/to/vendor/autoload.php
24
répondu aderuwe 2014-09-17 20:50:54

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 faire ce qui suit:

  1. Aller à File -> Settings -> PHP -> PHPUNIT.
  2. sélectionnez Use custom loader puis entrez le fichier autoload.php dans le répertoire du fournisseur de vos projets. Ce chargeur automatique 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 from le répertoire app de votre projet).

PHP -> PHPUNIT

, ce Qui doit être répété par projet, mais ce qui suit doit être fait une fois.

Vous devez configurer vos valeurs par défaut dans PHPStorm correctement.

  1. Aller à Run -> Edit Configurations... ou cliquez simplement sur le menu déroulant de la barre d'outils et sélectionnez Edit Configurations....
  2. Aller à Defaults -> PHPUnit
  3. sous Test Scope, sélectionnez Defined in configuration file
  4. assurez-vous que le champ de texte Interpreter options est vide
  5. aller à PHPUnit (ci-dessus Defaults) et supprimer toute entrée en dessous (de sorte que la prochaine fois que vous un test sur un fichier particulier, etc. il va en mettre un nouveau mais en utilisant la nouvelle valeur par défaut).

< code>modifier les Configurations...

61
répondu Adam Lynch 2013-03-26 07:03:06

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

Vous pouvez essayer d'ajouter le répertoire vendor/bin de votre projet local à php.include_path d'ini, mais en fin de Compte, cela semble que PhpStorm pourrait bénéficier de la prise en charge des installations du compositeur et de l'exécution du 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 connecter et de Le voter: http://youtrack.jetbrains.com/issue/WI-13429

5
répondu Seldaek 2012-10-10 08:55:43

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 au-dessus. Si vous avez téléchargé phpunit.phar de http://phpunit.de , Vous pouvez pointer PHPStorm vers elle via Settings = > PHP = > PHPUnit = > Path to phpunit.phar

2
répondu Vasiliy P 2014-03-09 19:45:57

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

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 comme un exécutable normal (ANT/phing / tâche native) mais vous perdrez toutes les fonctionnalités brillantes que PHPStorm offre comme la barre de progression, sautant à un test défaillant et le support de couverture de code.

, Donc à partir du code, vous pouvez dire que vous avez besoin pour ajouter un dossier appelé nommé PHPUnit à l'un des endroits dans votre chemin. L'ajout d'un fournisseur peut aider, mais gardez à l'esprit il doit correspondre à case lorsque vous le faites.

Jusqu'à ce que PHPStorm supporte l'utilisation de PHPUnit de composer ou d'un phar, Je ne pense pas que vous obtiendrez une meilleure intégration ( http://youtrack.jetbrains.com/issue/WI-13429 ) avec l'utiliser à partir de poire mais le piratage de votre chemin d'inclusion peut fonctionner hors.

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

1
répondu edorian 2012-10-10 15:47:01

J'ai trouvé que si j'ai tout mon 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 "configuration D'exécution" 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 + 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 jamais vous le souhaitez.
  4. Ensemble Test scope dans le répertoire où se trouvent vos tests.
  5. Cliquez sur OK
  6. ensuite, exécutez la nouvelle configuration.

phpstorm-run-à la configuration de la boîte de dialogue

Phpstorm Run|boîte de dialogue de Configuration

1
répondu b01 2014-01-05 13:07:39