2017-02-10 9 views
1

버전 3.1.12이고 postgres 모듈 버전 0.92를 사용하는 사이트가 있습니다.Silverstripe 단위 테스트 라이브 데이터베이스 수정 (포스트 그레스 모듈)

방금 ​​모든 것을 3.5.3과 1.2로 업그레이드했습니다. 기존의 단위 테스트와 변경되지 않은 단위 테스트에서 이상한 행동을 제외하면 모두 잘됩니다. 테스트가 객체를 프로그래밍 방식으로 생성 할 때 발생합니다 :

$page=new Page(); 
$page->Title='Read only success'; 
$page->write(); 

3.1 및 0.92에서 테스트를 실행 한 다음 성공을 반환합니다. tmp 데이터베이스에서 위의 작업을 수행합니다.

업그레이드 후 동일한 테스트가 수정없이 실행되고 성공을 반환합니다. 이 시간에만 작업이 현재 라이브 데이터베이스에서 수행됩니다. 위의 경우에는 내 관리 사이트 트리에 새 초안 페이지가 있습니다.

누구나 전에 본적이 있습니까? 나는이 사냥이 정확히 위험한 행동을 일으키는 원인을 추적하고 답을 구할 수있는 사냥을 다 써 버렸습니다. 당신이 당신의 테스트를위한 조명기 파일을 사용하지 않는 경우

+0

특정 Postgres 기능을 테스트하지 않으면 메모리 sqlite를 사용하여 테스트 속도를 높이는 것이 좋습니다. http://www.silverstrip.es/blog/how-to-speed-up-unit-tests-using- sqlite/ – wmk

+0

링크를 제공해 주셔서 감사합니다. 재미 있네요! – Aaryn

답변

2

, 당신은 당신이 테스트 데이터베이스를 사용하는 SapphireTest에게 확인해야합니다 : 같은

protected $usesDatabase = true; 

그렇지 않으면 생성 데이터 객체가 기본 데이터베이스에 직접 작성합니다.

어쨌든 조명기 파일을 사용하고있는 경우 이는 암시되어 있으므로 그렇지 않은 경우에만 필요합니다.

Here's the doc block, for reference.

+1

감사합니다. 그게 효과가 있었어. 유닛 테스트가 기본 DB를 변경하는 것이 가능하려면 매우 위험합니다. 초보 개발자는이 플래그 나 조명기를 사용하면 실제 변경이 발생할 수 있다는 것을 모르는 테스트를 쉽게 작성할 수 있습니다. 이것은 3.1에서 원자였습니다. 그 의도가 바뀌 었는지 궁금합니다. – Aaryn

+0

나는 현재의 행동보다는 달리 비활성화되어 있지 않으면, 당신이 전적으로 동의하고, 디폴트가 "참"이어야한다고 생각합니다. 프레임 워크에서 RFC를 만들 것을 환영합니다. –

+0

할 것입니다. 나는 이것이 포스트 그레스 모듈 테스트가 현재 망가 졌다는 것을 의미한다고 생각한다. 이 옵션없이 프로그램 적으로 페이지를 생성하므로. https://github.com/silverstripe/silverstripe-postgresql/blob/master/tests/PostgreSQLDatabaseTest.php#L20-L22. 이 테스트는 현재 사이트 트리에 페이지를 효과적으로 추가합니다. – Aaryn