Интеграция PHPUnit с CakePHP 1.3 - PullRequest
6 голосов
/ 23 мая 2011

Я искал учебник, чтобы помочь мне интегрировать PHPUnit с CakePHP.Хотите использовать тесты Selenium, поэтому предпочитайте PHPUnit.

Я пытался следовать учебному пособию на http://cakebaker.42dh.com/2006/03/22/selenium/, но, похоже, он не работает.Есть хорошие уроки?

Спасибо!

Ответы [ 2 ]

5 голосов
/ 08 октября 2014

Это относительно просто. Я использую торт 1.3 от установки композитора. Вот так выглядит мой composer.json:

{
    "config": {
        "vendor-dir": "vendors/composer"
    },
    "require": {
        "phpunit/phpunit": "3.7.*",
        "cakephp/cakephp-1.3": "1.3",
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "cakephp/cakephp-1.3",
                "version": "1.3",
                "source": {
                    "url": "https://github.com/cakephp/cakephp.git",
                    "type": "git",
                    "reference": "1.3"
                }
            }
        }
    ]
}

Затем файл phpunit bootstrap.php в каталоге тестов:

<?php
include('../vendors/composer/autoload.php');
include('../webroot/index.php');

Это phpunit.xml из того же каталога:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit
     bootstrap="bootstrap.php"

     backupStaticAttributes="false"

     cacheTokens="false"
     colors="false"
     convertErrorsToExceptions="true"
     convertNoticesToExceptions="true"
     convertWarningsToExceptions="true"
     forceCoversAnnotation="false"
     mapTestClassNameToCoveredClassName="false"
     printerClass="PHPUnit_TextUI_ResultPrinter"

     processIsolation="false"
     stopOnError="false"
     stopOnFailure="false"
     stopOnIncomplete="false"
     stopOnSkipped="false"
     testSuiteLoaderClass="PHPUnit_Runner_StandardTestSuiteLoader"

     strict="false"
     verbose="false"
    >

    <testsuites>
        <testsuite name="AllTests">
        <directory>.</directory>
        </testsuite>
    </testsuites>

    <filter>
        <blacklist>
            <directory suffix=".php"></directory>
            <file></file>
            <exclude>
                <directory suffix=".php"></directory>
                <file></file>
            </exclude>
        </blacklist>
        <whitelist processUncoveredFilesFromWhitelist="true">
            <directory suffix=".php"></directory>
            <file></file>
            <exclude>
                <directory suffix=".php"></directory>
                <file></file>
            </exclude>
        </whitelist>
    </filter>
</phpunit>

Не забудьте загрузить классы приложений в настройках теста. Вы можете сделать это так. Например, если ваш контроллер называется календарь, ваш calendarTest.php может выглядеть так:

<?php

/**
 * Class ComponentsCommonTest
 * @property calendarController $calendarController
 */
class CalendarTest extends PHPUnit_Framework_TestCase
{
    /**
     * @var calendarController $calendarController
     */
    private $calendarController;

    function setUp()
    {
        App::import('Core', array('View', 'Controller', 'Model', 'Router'));
        App::import('Controller', 'Calendar');
        $this->calendarController =& new CalendarController();
        $this->calendarController->constructClasses();
        $this->calendarController->layout = null;
    }
}

То же самое для моделей, классов поставщиков и так далее. Прекрасно работает для меня.

3 голосов
/ 24 мая 2011

К сожалению, CakePHP не предназначен для совместной работы с PHPUnit.CakePHP переключился на использование SimpleTest , и у вас будет один из двух вариантов: реорганизовать свои тесты для работы с SimpleTest или изменить ядро ​​для использования PHPUnit.

Однако следует указать, что Марк Стори заявил, что CakePHP 2.0 будет использовать PHPUnit для своей среды тестирования, поэтому, если вы можете подождать до тех пор, это может оказаться лучшим вариантом.

CakePHP 1.3 Bookпри тестировании

...