2017-12-27 47 views
0

을 autowiring에를, 나는 다음과 같은 오류를 얻을 :클래스를 찾을 수 없습니다 WebTestCase : <code>php bin/console debug:autowiring</code>를 검토

In FileLoader.php line 168: 

    Class Symfony\Bundle\FrameworkBundle\Test\WebTestCase not found in /vagrant/mysymfony/app/config/services.yml (whic 
    h is being imported from "/vagrant/mysymfony/app/config/config.yml"). 


In WebTestCase.php line 17: 

    Class Symfony\Bundle\FrameworkBundle\Test\WebTestCase not found 


In WebTestCase.php line 21: 

    Class Symfony\Bundle\FrameworkBundle\Test\KernelTestCase not found 


In KernelTestCase.php line 24: 

    Class PHPUnit\Framework\TestCase not found 

오류는 다음 파일로 인해 :

<?php 
/** 
* This file is part of the RestExtraBundle package [1]. 
* For the full copyright and license information, please view the LICENSE 
* file that was distributed with this[1] source code. 
* 
* @license MIT License 
* [1] https://github.com/willdurand/BazingaRestExtraBundle 
*/ 
namespace AppBundle\Test; 

use Symfony\Bundle\FrameworkBundle\Test\WebTestCase as BaseWebTestCase; 

/** 
* @author William Durand <[email protected]> 
*/ 
abstract class WebTestCase extends BaseWebTestCase 
{ 
    protected function assertJsonResponse($response, $statusCode = 200) 
    { 
     $this->assertEquals(
      $statusCode, $response->getStatusCode(), 
      $response->getContent() 
     ); 
     $this->assertTrue(
      $response->headers->contains('Content-Type', 'application/json'), 
      $response->headers 
     ); 
    } 

    protected function jsonRequest($verb, $endpoint, array $data = array()) 
    { 
     $data = empty($data) ? null : json_encode($data); 
     return $this->client->request($verb, $endpoint, 
      array(), 
      array(), 
      array(
       'HTTP_ACCEPT' => 'application/json', 
       'CONTENT_TYPE' => 'application/json' 
      ), 
      $data 
     ); 
    } 
} 

파일이에 다음 디렉토리 구조 :

. 
├── AppBundle.php 
├── Controller 
│   ├── DefaultController.php 
│   └── FooController.php 
└── Test 
    └── WebTestCase.php 

그리고 그 WebTestCase 클래스가 사용됩니다.

<?php 

namespace Tests\AppBundle\Controller; 

use AppBundle\Test\WebTestCase; 

class FooControllerTest extends WebTestCase 
{ 
    public function testFooAction() 
    { 
     $client = static::createClient(); 

     $crawler = $client->request('GET', '/foo'); 

     $this->assertEquals(200, $client->getResponse()->getStatusCode()); 
     $this->assertJsonResponse($client->getResponse()); 
    } 
} 

tests 디렉토리 안에 다음 경로에 있습니다 :

. 
└── AppBundle 
    └── Controller 
     ├── DefaultControllerTest.php 
     └── FooControllerTest.php 

시험은 문제의 어떤 종류없이 실행, 내가 실제로 우연히이 오류를 발견 한 다음 파일이다. 테스트에서 파일 및 그 파일에 대한 참조를 제거하면 아무런 번거 로움없이 debug:autowiring을 확인할 수 있습니다. 그러나 나는 내가 여기에서 놓치고있는 것을 알아낼 수 없다. 나는 그것이 파일 배치 또는 무언가와 관련이 있다고 생각하지만, 나는 정말로 모른다. 나 좀 도와 줄 수있어?

또한 명령을 검사하지 않으면 이러한 오류를 발견하지 못했을 것입니다. 앞으로 이런 종류의 에러를 발생시키는 저장소에 코드를 위탁하는 것을 피하기 위해 Symfony는 이러한 오류를 어딘가에 기록합니까? 또는 모든 debug 명령을 수동으로 확인해야합니까?

도움을 주셔서 감사합니다. vagrant/mysymfony/app/config/services.yml

# Learn more about services, parameters and containers at 
# https://symfony.com/doc/current/service_container.html 
parameters: 
    #parameter_name: value 

services: 
    # default configuration for services in *this* file 
    _defaults: 
     # automatically injects dependencies in your services 
     autowire: true 
     # automatically registers your services as commands, event subscribers, etc. 
     autoconfigure: true 
     # this means you cannot fetch services directly from the container via $container->get() 
     # if you need to do this, you can override this setting on individual services 
     public: false 

    # makes classes in src/AppBundle available to be used as services 
    # this creates a service per class whose id is the fully-qualified class name 
    AppBundle\: 
     resource: '../../src/AppBundle/*' 
     # you can exclude directories or files 
     # but if a service is unused, it's removed anyway 
     exclude: '../../src/AppBundle/{Entity,Repository,Tests}' 

    # controllers are imported separately to make sure they're public 
    # and have a tag that allows actions to type-hint services 
    AppBundle\Controller\: 
     resource: '../../src/AppBundle/Controller' 
     public: true 
     tags: ['controller.service_arguments'] 

    # add more services, or override services that need manual wiring 
    # AppBundle\Service\ExampleService: 
    #  arguments: 
    #   $someArgument: 'some_value' 
+0

이 파일의 내용을 무엇입니까 :'/ 방랑/mysymfony/응용 프로그램/설정/services.yml'가

services.yml이 경우 다른 사람이 이와 같이 보일 것 같은 문제에 직면? –

+0

@NikitaLeshchev 방금 주 질문을 편집했습니다. – MikelAlejoBR

+0

음 ... 나는 어떤 오류도 보지 못했다. 'composer dump-autoload'를 실행하십시오. LMK가 도움이된다면. –

답변

1


추가 내용이 나는 심포니 IRC 채널에서 충고를 받았다. Remco라는 사람이 excludesTest 폴더를 services.yml에 포함 시키라고했습니다. 현재 debug:autowiring을 (를) 실행해도 아무런 오류가 없습니다.

나는 여기에 내 질문에 대답을했지만 분명히 그는 StackOverflow 계정이 없으므로 직접 작성하겠습니다. 그러나 모든 크레딧은 그에게 전달됩니다. 고맙습니다. 또한 Nikita에게 시간과 도움을 주신 것에 감사드립니다.

# Learn more about services, parameters and containers at 
# https://symfony.com/doc/current/service_container.html 
parameters: 
    #parameter_name: value 

services: 
    # default configuration for services in *this* file 
    _defaults: 
     # automatically injects dependencies in your services 
     autowire: true 
     # automatically registers your services as commands, event subscribers, etc. 
     autoconfigure: true 
     # this means you cannot fetch services directly from the container via $container->get() 
     # if you need to do this, you can override this setting on individual services 
     public: false 

    # makes classes in src/AppBundle available to be used as services 
    # this creates a service per class whose id is the fully-qualified class name 
    AppBundle\: 
     resource: '../../src/AppBundle/*' 
     # you can exclude directories or files 
     # but if a service is unused, it's removed anyway 
     exclude: '../../src/AppBundle/{Entity,Repository,Tests,Test}' 

    # controllers are imported separately to make sure they're public 
    # and have a tag that allows actions to type-hint services 
    AppBundle\Controller\: 
     resource: '../../src/AppBundle/Controller' 
     public: true 
     tags: ['controller.service_arguments'] 

    # add more services, or override services that need manual wiring 
    # AppBundle\Service\ExampleService: 
    #  arguments: 
    #   $someArgument: 'some_value'