2013-12-20 1 views
1

저는 게임 개발자를위한 멋진 백엔드 API를 제공하는 오픈 소스 개인 프로젝트에서 현재 일하고 있습니다. 나는 개발의 초기 단계에 있지만, 내가 가면서 시험을 치를 계획이다. 그것은 내가 걸린 부분이다.laravel로 단위 테스트를 실행할 때 App :: error() 구현을 어떻게 테스트합니까?

잘못된 API 자격 증명이나 자격 증명 누락과 같은 오류가 발생하면 시스템에서 예외 데이터를 저장하여 JSON 인코딩 응답을 포착 할 수 있습니다.

시험은 내 BaseController에 던져 사람들을 위해 잘 작동하지만, 난 내 자신에 응답 할 수 있도록 나 또한 몇 Laravel 예외를 포착, 또는 적어도, 출력 JSON 다음과 같은 :

응용 프로그램/글로벌/시작합니다. PHP

App::error(function(Exception $exception, $code) { 
    Log::error($exception); 
}); 

App::missing(function(Exception $exception) { 
    return BaseController::error(
      Config::get('response.method.code'), 
      Config::get('response.method.http'), 
      'Method not found' 
    ); 
}); 

App::error(function(Viper\Exception $exception) { 
    return BaseController::error(
      $exception->getCode(), 
      $exception->getStatusCode(), 
      $exception->getMessage() 
    ); 
}); 

나는 일반 예외가 아닌 별도의 값을 확인해야하므로 나는 try { } catch() { } 접근 방식을 사용하고 있습니다.

public function testNoMethodGET() { 
    $config = Config::get('response.method'); 

    try { 
     $this->call('GET', '/'); 
    } catch(\Viper\Exception $e) { 
     $this->assertEquals($e->getCode(), $config['code']); 
     $this->assertEquals($e->getStatusCode(), $config['http']); 
    } 

    $this->fail('Exception not thrown'); 
} 

이 모두 좋은 잘하지만 나는 JSON이 유효한지 여부를, 예를 들어 같은 실제 응답에 몇 가지를 확인할지 여부를 응답 구조와 일치하고 있는지 여부 응답 값이 정확합니다. 내가 변수에 $this->call()의 반환 값을 설정하면

, 나는 catch 블록 내에서 해당 변수에 액세스 할 수없는 것, 그래서 문제는 예외가 일단이, 가 어떻게 $this->call()의 반환 값을 테스트 할 수 있습니다 붙잡 혔어? 테일러 Otwell에 따르면

답변

1

는 :.

"이것은 당신은 정말 핸들러를 테스트하려는 테스트를 드 커플 링에 의해 해결 될 수 있고, 예외는 어쨌든 완전히 별도로을 던져된다 [원문] 테스트를 분리하는 예를 들면 :.

0 지금 당신은 당신의 응용 프로그램의 나머지 부분에서 ErrorTypeHandler 클래스 별도로 에 대한 테스트 케이스를 작성할 수 있습니다. 그런 다음 @expectedException와 응용 프로그램에 의해 발생하는 그 적절한 예외를 확인하십시오. "

를 참조하십시오, 당신은 이미 BaseController에 오류 처리기를 격리했다 : 오류()를 사용하면 별도의 단위 테스트에서 $ this-> call()을 사용하지 않고 직접 응답을 테스트 할 수 있습니다. 대신 원하는 매개 변수로 $ response = BaseController :: error()를 호출 한 다음 응답을 검사하고 관련된 주장을 적용하십시오.

+0

Ahh 우수, 고맙습니다. :) – ollieread

관련 문제