Модульный тест CakePHP для плагина продолжал выдавать Cake \ Controller \ Controller :: __ construct () должен быть экземпляром Cake \ Http \ ServerRequest, строка дана - PullRequest
0 голосов
/ 25 августа 2018

CakePHP 3.6.10

Плагин, сгенерированный с помощью команды bake.

Я выполняю простой модульный тест на моем контроллере промежуточного программного обеспечения PSR-7 с использованием CakePHP Test Suite IntegrationTestCase.

Я бы следовал приведенной здесь инструкции https://book.cakephp.org/3.0/en/development/testing.html, в которой говорится, что для useHttpServer установлено значение true в функции setUp,

$this->useHttpServer(true); 

, но в итоге возникает ошибка

PHPUnit 6.5.12 by Sebastian Bergmann and contributors.

EIIII                                                               5 / 5 (100%)

Time: 1.24 seconds, Memory: 8.00MB

There was 1 error:

1) TripfezApi\Test\TestCase\Controller\ToursControllerTest::testIndex
TypeError: Argument 1 passed to Cake\Controller\Controller::__construct() must be an instance of Cake\Http\ServerRequest, string given

/var/www/html/tripfez-tours/plugins/TripfezApi/vendor/cakephp/cakephp/src/Controller/Controller.php:241
/var/www/html/tripfez-tours/plugins/TripfezApi/vendor/cakephp/cakephp/src/TestSuite/MiddlewareDispatcher.php:80
/var/www/html/tripfez-tours/plugins/TripfezApi/vendor/cakephp/cakephp/src/TestSuite/IntegrationTestCase.php:521
/var/www/html/tripfez-tours/plugins/TripfezApi/vendor/cakephp/cakephp/src/TestSuite/IntegrationTestCase.php:490
/var/www/html/tripfez-tours/plugins/TripfezApi/vendor/cakephp/cakephp/src/TestSuite/IntegrationTestCase.php:375
/var/www/html/tripfez-tours/plugins/TripfezApi/tests/TestCase/Controller/ToursControllerTest.php:42
/home/vagrant/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:195
/home/vagrant/.composer/vendor/phpunit/phpunit/src/TextUI/Command.php:148

ERRORS!
Tests: 5, Assertions: 0, Errors: 1, Incomplete: 4.

это класс ошибок в IntegrationTestCase или он действительно не работает таким образом?

Ниже приведен мой полный код

<?php
namespace TripfezApi\Test\TestCase\Controller;

use Cake\TestSuite\IntegrationTestCase;
use TripfezApi\Controller\ToursController;
use Cake\Http\ServerRequest;
use Cake\Http\Response;
use Cake\Controller\Controller;
use Cake\Event\Event;
use GuzzleHttp;

/**
 * TripfezApi\Controller\ToursController Test Case
 */
class ToursControllerTest extends IntegrationTestCase
{
    private $controller;
    private $http;


    /**
     * Fixtures
     *
     * @var array
     */
    public $fixtures = [
        'plugin.tripfez_api.tours'
    ];

    public function setUp()
    {
        parent::setUp();
        $this->configApplication('TripfezApi\Controller\ToursController', [CONFIG]);
        $this->useHttpServer(true);
    }


    public function testBasicAuthentication()
    {
        $this->configRequest([
            'environment' => [
                'PHP_AUTH_USER' => 'username',
                'PHP_AUTH_PW' => 'password',
            ]
        ]);

        $this->get('/api/posts');
        $this->assertResponseOk();
    }

    public function tearDown(){

        $this->useHttpServer(false);
    }
}
...