2017-10-27 1 views
0

base_path() 도우미를 사용하는 특성 메서드를 검사하는 단위 테스트를 작성하려고하지만 예외가 발생합니다 : Call to undefined method Illuminate\Container\Container::basePath().Laravel에서 단위 테스트를 수행 할 때 setUp/tearDown 픽스처

전체 스택 트레이스는 다음과 같습니다 : 나는 setUptearDown기구를 사용하여 그것을 아래로 추적 한

\vendor\laravel\framework\src\Illuminate\Foundation\helpers.php:179 
\app\Message.php:47 
\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php:432 
\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php:333 
\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Concerns\HasAttributes.php:306 
\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php:1279 
\tests\Unit\MessageTest.php:59 

- 내가있어 경우에도 :

public function setUp() 
{ 
    //$_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__) . "/../.."; 
} 

public function tearDown() 
{ 
    //unset($_SERVER['DOCUMENT_ROOT']); 
} 

내가 언급 받고 있어요 오류. 조명기를 완전히 제거하면 오류가 사라집니다.

주어진 방법을 setUpBeforeClasstearDownAfterClass으로 바꾼 다음에는 오류가 사라지지만 그 원인을 알고 싶습니다.

내가 아는 한 바닐라 Laravel 5.4 설치 (정확히는 5.4.36)이지만 추가 라이브러리가 설치되어 있습니다 (실제로 어떤 라이브러리를 말할 수있는 것은 아닙니다). 파일을 설정하지 않았지만 무엇을 찾을 지 알 수 없을만큼 공평합니다.

나는 Laravel (같은 버전)을 새로 설치하여 테스트했으며, 그대로 (그대로 phpunit.xml 파일로) 일어났습니다. 버전 5.5에서는 그렇지 않습니다.

답변

1

부모 클래스 setUp 및 tearDown 메서드를 직접 호출 해보십시오. 트릭을했지만 그렇게 왜 당신이 알고

public function setUp() 
{ 
    parent::setUp() 
    //$_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__) . "/../.."; 
} 

public function tearDown() 
{ 
    parent::tearDown() 
    //unset($_SERVER['DOCUMENT_ROOT']); 
} 
+0

: 지금처럼

? – eithed

+0

테스트 클래스의 상속을 따르는 경우 \ Foundation \ Testing \ TestCase로 바뀝니다. –

+1

이 클래스는 모든 테스트에서 실제로 Laravel을 설정하는 자체 setUp 및 tearDown 메서드를 가지고 있습니다. 따라서 테스트 클래스에서 parent :: setUp()을 호출하지 않으면이 코드가 실행되지 않고 Laravel App이없고 오류가 발생합니다. 자신 만의 setUp/tearDown 메소드가 없으면 setUp/tearDown의 상위 클래스 버전이 PHP에 의해 자동으로 실행됩니다. –

관련 문제