2014-12-13 2 views
2

laravel 앱에 대한 승인 테스트를 실행하는 데 codeception을 사용하고 있습니다. 내가 겪어 본 한 가지 문제는 로그인 페이지가 캐시 될 때 로그인 테스트가 실패하기 시작하고 자동으로 로그인되는 것입니다. 캐시를 지울 때 테스트가 다시 시작되기 때문에 일반적으로 테스트 또는 응용 프로그램 코드를 변경하지 않고 일반적으로 오류가 발생하기 때문에이 경우라고 생각합니다.코드 테스트 전에 laravel 4 앱용 캐시 지우기

지금 여기 도우미 메서드

public function login($username, $password, $I) { 
    $I->amOnPage('users/login'); 
    $I->fillField('email', $username); 
    $I->fillField('password', $password); 
    $I->click('Login'); 
    $I->amOnPage('admin/'); 
    $I->see('Welcome'); 
    } 

테스트가 실패 할 때마다 나는 주기적으로 캐시를 삭제 한 적이 있지만 그것은 지루한 해지고로 추출 문제의 로그인 테스트가 있습니다. 나에게 캐시를 지우고 모든 테스트에서 함수를 호출하는 도우미를 등록 할 수 있기를 원합니다.

public function clearCache($I) { 
    $cache = $this->getModule('Cache'); 
    $cache->flush(); 
    } 
이 어떤 문서 here에 의해 제안 된 것으로 보인다

,하지만 난 오류 "모듈 캐시 할 수 없습니다 AcceptanceHelper.php에 다음과 같은 기능을 here을 제안 나는 도우미로 기능을 추출 연결된 ". 내가 config 파일에서 MySQL의 권한을 부여 할 필요가 거라고 생각

SQLSTATE[28000] [1045] Access denied for user 'stephen'@'localhost' (using password: NO) 

: 나는 Laravel4 모듈을 필요로 같은 내 acceptance.suite.yml 파일 만이 행운에 하나 내가이 오류를받은 추가 있도록 보였다 , 그러나 그것도 작동하지 않는 것 같습니다. 여기 내 acceptance.suite.yml 파일입니다 :

class_name: AcceptanceTester 
modules: 
    enabled: 
     - PhpBrowser 
     - AcceptanceHelper 
     - Laravel4 
    config: 
     PhpBrowser: 
      url: 'http://104.131.29.69:8000/' 
     Laravel4: 
      user: 'root' 
      password: 'pAsSwOrD' 

마지막으로 나는 this 대답을 읽고 내가 실제로 설정 파일에 내 도우미 기능이 더 같이해야 Laravel4을 포함하지 말았어야 것처럼 보였다 :

public function clearCache($I) { 
$L = $I->getLaravel4(); 
Cache::flush(); 
} 

는하지만 난 그냥 대신 오류가 바람 :

Class 'Codeception\Module\Cache' not found 

그래서 내가 붙어있어. 감사!

답변

1
Artisan::call('cache:clear'); 

이 더 좋습니다. Cli` - : http://codeception.com/docs/modules/Filesystem 은 그냥 acceptance.suite.yml 파일에서 활성화 : `모듈 :이 기능을 사용하도록 설정 한

1

그래, 어떻게하는지 알아 냈어. 분명히이 같은 acceptance.suite.yml 파일에 포함 할 수 cli라는 모듈이있다 :

class_name: AcceptanceTester 
modules: 
    enabled: 
     - PhpBrowser 
     - AcceptanceHelper 
     - Cli 

이 모듈은 runShellCommand() 기능을 스크립트에서 쉘 명령어를 사용할 수 있습니다. 내 캐시가 응용 프로그램/저장/캐시/디렉토리에있는 파일에 저장되어 있기 때문에 내가 실행해야 쉘 명령은 다음과 같습니다

rm app/storage/cache/* 

봐라 캐시가 삭제. 그런 다음 테스트 파일은 다음과 같이 표시됩니다

$I->runShellCommand('rm -rf app/storage/cache/*'); 

나는 내가 각 로그인하기 전에 캐시를 지우 싶어 알고 있기 때문에, 내가 로그인하는 데 사용되는 기능에 포함시켜이 조금 단순화하기로 결정 필자는 AcceptanceHelper 내부의 로그인 기능에 해당 라인을 포함 시켰습니다. 그러면 모든 테스트에서 액세스 할 수 있습니다.

이것은 내가 사용하고있는 캐싱의 종류에 대해 불가지론 적이기 때문에 약간의 해결 방법입니다. (만약 내가 memcached를 사용한다면 다른 것을해야 할 것입니다.) 그러나 그것은 저에게 효과적이었습니다. 나눠.

+1

는 또한 모듈라는 파일 시스템을 사용할 수 있습니다 그런 다음 테스트에 다음과 같이 쓸 수 있습니다 : '$ I-> cleanDir ('app/storage/cache');' –