Drupal 8 complète le framework de test basé sur Simpletest avec PHPUnit , et Simpletest pourrait être supprimé in Drupal 9.
Je ne mets pas encore à niveau vers Drupal 8, mais je me demandais comment écrire des tests existants dans PHPUnit (pour suivre la tendance) pour Drupal = 7, à la place dans Simpletest?
Existe-t-il une méthode ou un module pour intégrer PHPUnit avec Drupal 7?
Il y en a peu comme phpunit ou drunit , mais ils ne sont pas pour Drupal 7.
Vous pouvez exécuter des tests PHPUnit en démarrant Drupal dans chacun de vos fichiers de test. Ce n'est pas idéal, mais cela fonctionne.
define('DRUPAL_ROOT', 'your/path/to/drupal');
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
// Bootstrap Drupal.
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
// Proceed with PHPUnit tests as usual from here.
class MyTest extends \PHPUnit_Framework_TestCase {
...
PHPUnit fournit une belle API pour construire les objets, contrairement au test simple de Drupal. Il y a ne bibliothèque disponible dans Gist pour intégrer PHPUnit avec Drupal 7 .
Pour exécuter ces scripts, vous devez vérifier ceci Gist-repository . Pour exécuter des tests unitaires dans la ligne de commande, accédez simplement à un site Drupal (c.-à-d. <DRUPAL_ROOT>/sites/default
) et utilisez dphpunit.bash comme vous utiliseriez la commande phpunit.
Le script se compose de 3 fichiers:
Source: http://devblog.more-onion.com/content/writing-unit-tests-drupal-7
bootstrap.inc.php
<?php
$path = CWD;
$site_dir = NULL;
$dpl_dir = NULL;
while ($path != '/') {
if (file_exists($path . '/settings.php')) {
$site_dir = $path;
}
if (file_exists($path . '/index.php') && file_exists($path . '/includes/bootstrap.inc')) {
$dpl_dir = $path;
break;
}
$path = dirname($path);
}
if (!$dpl_dir) {
echo "No drupal directory found in or above current working directory. Aborting. \n";
exit(1);
}
if (!$site_dir) {
$site_dir = $dpl_dir . '/sites/default';
if (!file_exists($site_dir . '/settings.php')) {
echo "No configured site found. Aborting.\n";
exit(1);
}
}
$_SERVER['HTTP_Host'] = basename($site_dir);
$_SERVER['REMOTE_ADDR'] = '127.0.0.1';
define('DRUPAL_ROOT', $dpl_dir);
set_include_path($dpl_dir . PATH_SEPARATOR . get_include_path());
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
dphpunit.bash
#!/bin/bash
# get dirname of the script
DIR="$(dirname $(readlink "$0"))"
# assume the boostrap script is stored in the same directory
php "$DIR/drun-phpunit.php" "$(pwd)" --bootstrap "$DIR/bootstrap.inc.php" "$@"
drun-phpunit.php
<?php
require_once 'PHP/CodeCoverage/Filter.php';
PHP_CodeCoverage_Filter::getInstance()->addFileToBlacklist(__FILE__, 'PHPUNIT');
if (extension_loaded('xdebug')) {
xdebug_disable();
}
if (strpos('/usr/bin/php', '@php_bin') === 0) {
set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path());
}
require_once 'PHPUnit/Autoload.php';
define('PHPUnit_MAIN_METHOD', 'PHPUnit_TextUI_Command::main');
define('CWD', $_SERVER['argv'][1]);
unset($_SERVER['argv'][1]);
$command = new PHPUnit_TextUI_Command;
$command->run($_SERVER['argv']);
Il existe une autre bibliothèque disponible pour l'intégration PHPUnit avec Drupal 7: https://github.com/sebastianbergmann/phpunit
Plus d'informations sur ces scripts peuvent être vérifiées ici: http://thomaslattimore.com/blog/using-phpunit-with-drupal-7
<?xml version="1.0" encoding="UTF-8"?> <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="phpunit.xsd" bootstrap="drupal_phpunit_bootstrap.php" verbose="true"> </phpunit>
<?php $_SERVER['HTTP_Host'] = 'your.url'; $_SERVER['SCRIPT_NAME'] = '/index.php'; $_SERVER['REMOTE_ADDR'] = '127.0.0.1'; $_SERVER['REQUEST_METHOD'] = 'GET'; $_SERVER['SERVER_NAME'] = NULL; $_SERVER['SERVER_SOFTWARE'] = NULL; $_SERVER['HTTP_USER_AGENT'] = NULL; // Fix for behat drupal instantiation. define('DRUPAL_ROOT', dirname(realpath(__FILE__))); require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
Gist: https://Gist.github.com/permanovd/cb9c02920c49a29c97653f4f697147b1
C'est tout. Vous pouvez maintenant démarrer vos tests de plusieurs manières.
phpunit -c phpunit.xml.dist QuestionValidationValueOptionsInputTest /yoursite.dir/public_html/profiles/standard/modules/some_module/tests/QuestionValidationTest.php
où:
Vous devez ajouter la configuration de test de fonctionnement
Et pas besoin d'inclure drupal bootstrap code dans chaque test).
Vous pouvez avoir des problèmes avec les tests en raison d'une mauvaise version php de votre environnement.