2016-05-31 1 views
1

저는 초보 개발자이며 phpUnit을 설정하고 기본 테스트 세트를 기존 앱에 설정하려고합니다. 나타나게 하다. 나는 라라웨어 문서를 통해 몇 가지 기본적인 테스트를 실행하려고합니다.phpUnit 경로를 테스트하는 중 오류가 발생했습니다 : ErrorException : 비 객체의 속성을 얻으려고 시도합니다.

AlertsControllerTest::testIndexRoute 
ErrorException: Trying to get property of non-object 

내가 전화 한 방법은 다음과 같습니다 :

$response = $this->action('GET', '[email protected]'); 

나는 다음과 같은 예외를 얻을 : 나는 다음과 같은 실행하려고하면

public function count() { 
    $statusIds = DB::table('alert_status')->where('user_id', $this->crmUser->id)->where('is_new', 0)->lists('alert_id'); 
    $count = DB::table('alerts')->WhereNotIn('id', $statusIds)->count(); 
    return Response::json($count); 
} 

는 사람이 난 이유를 알고 있나요 이 오류가 발생합니까? 내가 아는 한, 나는 무엇이든 속성을 얻으려고하지 않는다. 나는 그 길로 전화하려고하고있다.

오류를 던지는 시험 방법은 다음과 같습니다 게시물에 매우 제한된 정보와

public function testIndexRoute() { 
     $this->crmUser = new stdClass(); 
     $this->crmUser->id = new stdClass(); 
     $this->crmUser->id = 1; 
     $response = $this->action('GET','[email protected]');   
     $count = $response->original; $this->assertResponseOk(); 
    } 

답변

1

, 나는이 문제를 추측하고있어 $this->crmUser->id입니다. count 메서드에서 DB를 호출하기 전에 var_dump (crmUser)을 사용해보십시오.

테스트중인 count() 메서드가 속한 클래스 인스턴스에 대한 단위 테스트가 crmUser를 설정하지 않았다고 추측합니다.

public function count() { 
     var_dump($this->crmUser); 
     $statusIds = DB::table('alert_status')->where('user_id', $this->crmUser->id)->where('is_new', 0)->lists('alert_id'); 
     $count = DB::table('alerts')->WhereNotIn('id', $statusIds)->count(); 
     return Response::json($count); 
} 

phpunit 테스트 방법의 텍스트를 게시하면 많은 도움이됩니다.

+0

난 아직도 비록 같은 오류를 받고 있어요 ... 공공 기능 testIndexRoute() { $ this-> crmUser = 새 stdClass(); $ this-> crmUser-> id = new stdClass(); $ this-> crmUser-> id = 1; $ response = $ this-> action ('GET', 'AlertsController @ bannerAlerts'); $ count = $ response-> original; $ this-> assertResponseOk(); } – brianfr82

+0

@ brianfr82 OP에 테스트 방법을 추가했습니다. 문제는 테스트 메소드 안에'$ this-> crmUser'를 추가하고 테스트중인 클래스가 아닌'AlertsControllerTest'에 추가하는 것입니다. 테스트 된 클래스에 사용자를 주입해야하는데, 'AlertsController' 인스턴스 인 – Ray

+0

을 따르고 있습니다.하지만 PHP에서 실제로 어떻게하는지 잘 모르겠습니다. 조금 더 깊이 설명해 주시겠습니까? 미안하지만, 나는 비참하고 미숙하며 많은 것을 나에게 던져주고있다. – brianfr82

관련 문제