Làm thế nào để chạy các bài kiểm tra PHPUnit?


12

Drupal 8 đang bổ sung khung thử nghiệm dựa trên Simpletest với PHPUnit và Simpletest có thể được gỡ bỏ trong Drupal 9.

Tôi chưa nâng cấp lên Drupal 8, nhưng tôi đã tự hỏi làm thế nào tôi có thể viết các bài kiểm tra hiện có trong PHPUnit (để theo dõi xu hướng) cho Drupal 7, thay vào đó là trong Simpletest?

Có phương pháp hay mô-đun nào để tích hợp PHPUnit với Drupal 7 không?

Có một số ít như phpunit hoặc drunit , nhưng chúng không dành cho Drupal 7.


1
Chỉ muốn ném Behat ra khỏi đó. Thật tuyệt vời khi thực hiện các kịch bản thử nghiệm trong thế giới thực (không thực sự là thử nghiệm đơn vị): drupal.org/project/drupalextension Sau khi bạn cài đặt xong, nó giúp thử nghiệm chức năng Drupal một cách dễ dàng. Chúng tôi đang chạy Behat trong môi trường CI và yêu thích nó!
donutdan4114

@ donutdan4114 bạn có thể cung cấp thêm một số thông tin hoặc video hướng dẫn cho biết cách bạn thực hiện việc này với Drupal không? Tôi rất quan tâm.
zbest

Câu trả lời:


11

Bạn có thể nhận các bài kiểm tra PHPUnit để chạy bằng cách khởi động Drupal trong mỗi tệp kiểm tra của mình. Nó không lý tưởng, nhưng nó hoạt động.

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 {
  ...

4
Nếu bạn cần làm điều này, những gì bạn đang viết không phải là Bài kiểm tra đơn vị và có lẽ bạn chỉ nên sử dụng DrupalWebTestCase từ mô-đun kiểm tra lõi dựa trên SimpleTest.
matt2000

@ matt2000 yea và đợi hàng giờ cho đến khi các bài kiểm tra kết thúc ...
Codium

3

PHPUnit cung cấp một API đẹp để xây dựng các đối tượng trong khi đơn giản nhất của Drupal thì không. Có một thư viện có sẵn để tích hợp PHPUnit với Drupal 7 .
Để thực thi các tập lệnh này, bạn cần kiểm tra kho lưu trữ chính này . Để thực hiện Kiểm tra đơn vị trong dòng lệnh, chỉ cần truy cập trang web Drupal (ví dụ. <DRUPAL_ROOT>/sites/default) Và sử dụng dphastait.bash giống như bạn sẽ sử dụng lệnh phpunit.

Kịch bản bao gồm 3 tệp:

  1. dphastait.bash - đơn giản chỉ cần gọi drun-dphastait.php với một vài tham số phụ. Điều đó là cần thiết bởi vì PHP không có khả năng xử lý các liên kết tượng trưng một cách chính xác.
  2. drun-dphastait.php - về cơ bản giống như trình chạy phpunit ngược dòng, ngoại trừ việc nó xử lý tham số phụ.
  3. bootstrap.inc.php - làm cho một bootstrap Drupal rất giống với drush.

Nguồn: http://devblog.more-onion.com/content/wr-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']);

Có thêm một thư viện để tích hợp PHPUnit với Drupal 7: https://github.com/sebastianbergmann/phastait

Thông tin thêm về các tập lệnh này có thể được kiểm tra tại đây: http : // thomaslatt Morph.com/blog/USE-phastait-with-drupal-7


5
Đáng buồn thay, repo này đã biến mất.
sheldonkreger 17/2/2015

2
-1 vì ý chính đã biến mất.
cwallenpoole

1

Có cách giải quyết với tập tin cấu hình.

  1. Tạo tệp phpunit.xml.dist trong thư mục gốc dự án drupal của bạn. Phải chứa cái này
<?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>
  1. Phastait phải bootstrap cá thể drupal của chúng tôi. Tạo tập tin bootstrap phpupit drupal. Tôi thích đặt tên nó là drupal_phastait_bootstrap.php
<?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

Đó là tất cả. Bây giờ bạn có thể bắt đầu bài kiểm tra của bạn theo nhiều cách.

1. CLI

Phununit -c

Ở đâu:

  • -c : Xác định tệp cấu hình.
  • Câu hỏiValidationValueOptionsInputTest và đường dẫn : Xác định tên lớp kiểm tra và đường dẫn đến nó.

2. IDE (phpstorm)

Bạn phải thêm cấu hình chạy thử nghiệm

Kiểm tra cấu hình chạy

Và không cần phải bao gồm mã bootstrap drupal vào mỗi bài kiểm tra.

Ghi chú

Bạn có thể gặp vấn đề với các bài kiểm tra vì phiên bản php sai của môi trường của bạn.

Đọc thêm:

https://phastait.de/manual/c Hiện / en / Organizing-tests.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.