Tôi đã hỏi câu hỏi này trên StackOverflow và được gợi ý rằng tôi hỏi nó ở đây.
Tôi quen thuộc với thử nghiệm đơn vị / hệ thống / tích hợp và muốn có thể kiểm tra thành phần Joomla của tôi. Có một cách tiêu chuẩn để làm điều này?
Tôi đang làm việc thông qua ví dụ thành phần mvc j Joomla này , không bao gồm các bài kiểm tra. Tất cả những gì tôi có thể tìm thấy trong tài liệu Joomla và trên các trang web khác nhau là các đoạn mã kiểm tra & tệp bootstrap.php. Cụ thể những gì tôi muốn biết là:
- Nơi đặt mã kiểm tra thành phần
- Tôi có cần phải cung cấp bootstrap.php của riêng mình không, hoặc có một số cách để chỉ 'bao gồm j Joomla' và chạy thử nghiệm của tôi
Lý tưởng nhất là ai đó có thể hướng tôi đến một thành phần Joomla nguồn mở có các bài kiểm tra & hướng dẫn về cách chạy chúng (có một cái nhìn nhanh, 5 hoặc trước đó không có các bài kiểm tra).
Gần nhất tôi đã tìm thấy là cái này , mà tôi đã dựa trên bài kiểm tra giả của tôi.
Những gì tôi đã làm cho đến nay
Cấu trúc thư mục thành phần:
- Chào thế giới/
- quản trị viên/
- ...
- kiểm tra /
- bootstrap.php
- phpunit.xml
- modelHelloWorldsTest.php
- Địa điểm/
- ...
- hellowworld.xml
- quản trị viên/
Lần thử đầu tiên
Để chạy thử nghiệm, tôi cài đặt / sao chép thành phần vào bản cài đặt Joomla của mình. Sau đó tôi chạy lệnh sau từ ~ j Joomla / quản trị / thành phần / com_helloworld / tests:
php phpunit-4.2.phar --bootstrap bootstrap.php .
từ đó tôi nhận được
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
Tôi thu thập điều này có nghĩa là bootstrap.php của tôi không đúng và chưa tải các lớp Joomla cần thiết. Tôi sẽ điều tra điều này tại một số điểm, nhưng có vẻ như rất nhiều thiết lập chỉ để chạy một số thử nghiệm.
bootstrap.php:
<?php
error_reporting(E_ALL);
define('_JEXEC', 1);
define('BASEPATH',realpath(dirname(__FILE__).'/../../'));
define('JOOMLA_PATH',realpath(dirname(__FILE__).'/../../../../../'));
define('JOOMLA_ADMIN_PATH',realpath(dirname(__FILE__).'/../../../../'));
$_SERVER['HTTP_HOST'] = 'localhost';
$_SERVER['REQUEST_METHOD'] = 'GET';
if (file_exists(JOOMLA_ADMIN_PATH . '/defines.php'))
{
include_once JOOMLA_ADMIN_PATH . '/defines.php';
}
if (!defined('_JDEFINES'))
{
define('JPATH_BASE', JOOMLA_ADMIN_PATH);
require_once JPATH_BASE . '/includes/defines.php';
}
require_once JPATH_BASE . '/includes/framework.php';
require_once JPATH_BASE . '/includes/helper.php';
require_once JPATH_BASE . '/includes/toolbar.php';
define('JPATH_COMPONENT',JOOMLA_ADMIN_PATH.'/components/com_content');
$app = JFactory::getApplication('administrator');
include BASEPATH.'/controller.php';
mô hìnhHelloWorldsTest.php:
<?php
class HelloWorldsTest extends \PHPUnit_Framework_TestCase {
public function testList(){
$c = new ContentController();
$model = $c->getModel('helloworlds');
$worlds = $model->getItems();
var_dump($worlds);
$this->assertNotEmpty($worlds);
}
}
phpunit.xml:
<phpunit bootstrap="bootstrap.php"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
stopOnFailure="false"
syntaxCheck="false"
verbose="true">
</phpunit>
Lần thử thứ hai
Sau khi thấy câu trả lời này , tôi đặt các bài kiểm tra của mình dưới bài kiểm tra / đơn vị trong phần cài đặt j Joomla của tôi, sao chép phpunit.dist.xml và bootstrap.php từ repo j Joomla-cms đến các vị trí thích hợp của chúng và vẫn nhận được
Fatal error: Class 'ContentController' not found in C:\inetpub\wwwroot\ws_cairnstest\administrator\components\com_helloworld\tests\modelsHelloWorldsTest.php on line 5
lỗi tôi đã nhận được trước đây.