2016-08-26 2 views
0

필자는 Selenium을 사용하여 UI 자동화를 주로 작성하고 실제로 독립적 인 병렬 실행 준비 테스트를 작성하기 위해 필요한 테스트 데이터 (예 : 로그인 할 사용자 계정)를 동적으로 생성 및 파기해야하는 테스트가 필요합니다. 런타임에.Factory Girl은 다른 테스트에서 사용하기 위해 영구 테스트 데이터/이슈를 효율적으로 생성하는 데 사용할 수 있습니까?

필자는 UI 자동화 테스트 사례의 설정 단계에서 이러한 테스트 데이터를 만드는 데 도움이되는 좋은 API를 원하지만, 곧 출시 될 프로젝트에는 API가 없거나 그러한 일을 할 수있는 공개적으로 접근 가능한 서비스.

개발자는 Rails 테스트에서 Factory Girl을 사용하여 이와 같은 작업을 생성한다고 말했고, 비슷한 데이터를 만들기 위해 이미 수행 한 작업을 활용할 수 있기를 기대합니다. 우리는 자체 데이터베이스 주입 스크립트를 작성 및 유지하거나 UI 자동화를 통해 UI 등을 통해이 테스트 데이터를 실제로 만들려고하지 않아도되고 싶습니다.

그래서! 실제로 테스트 데이터를 생성하는 유틸리티 인 사용자 정의 rspec 테스트를 작성하고 테스트중인 시스템 외부에서 원격으로 그리고 필요할 때 트리거 할 수 있다고 가정하면 Factory Girl은 초기화되지 않은 방식으로 호출 될 수 있습니다 실행하기 전에 데이터베이스를 종료하고 생성 된 데이터를 파괴하지 않습니까? 개발자는 Factory Girl이 테스트에 적합한 데이터를 만들고 있는지 확인하고 있으므로 영구 테스트 계정을 만드는 데 사용할 수 있다면이를 피기 백하고 사용하는 것이 좋습니다. 감사!

답변

1

당신이 찾고있는 것은 RSpec의 transactional_fixtures을 끄는 것입니다. 그에 따라 spec_helper 파일을 업데이트하십시오.

# spec/spec_helper.rb 

RSpec.configure do |config| 
    # allow test data to persist between transactions 
    config.use_transactional_fixtures = false 
end 

이것은 무차별 대입 방식입니다. UI 엔드 투 엔드 테스트에서는 이해할 수 있지만 단위 테스트에는 적합하지 않습니다. 단위 테스트가 데이터베이스의 특정 상태에 의존하지 않는 임의의 분리 된 방식으로 수행되기를 원하기 때문입니다.

좋은 방법은 실행중인 테스트의 유형에 따라 조건부로 트랜잭션 픽스처를 설정 또는 해제하는 것입니다.

여기에 주제에 대한 기사는 다음과 같습니다 https://weilu.github.io/blog/2012/11/10/conditionally-switching-off-transactional-fixtures/

당신은 단지 하나 개의 테스트를 위해 트랜잭션기구를 사용하지 않을 경우에는 설명 블록을 해제 할 수 있습니다 :

describe "YourAwesomeFeature" do 
    self.use_transactional_fixtures = false 
+0

감사합니다! 트랜잭션 픽스처 설정으로 인해 Factory Girl에서 생성 된 것들이 여러 테스트에서 지속될 수 있지만 Factory Girl은 결국 모든 작업을 취소 할 것입니다. 나는 그것을 만들 필요가 없다 - 그것은 생성 된 모든 것을 영구히 남겨두고 rspec 테스트가 끝나면 누구든지 시스템과 상호 작용할 수있게해야한다. 그것은 Database Cleaner가하는 일이며, 단순히 #clean이 없다면 DB에 모든 것을 영구적으로 남겨 둘 것입니까? –

+0

FactoryGirl에서 아무 것도 삭제하지 않습니다. 말 그대로 개체를 생성하는 "공장"이라고 생각하십시오. 단위 테스트를 수행하지 않고 오직 하나의 유스 케이스가 데이터베이스에 객체를 유지시키는 것이고,'transactional_fixtures'를 끄는 것은 잘 작동합니다. 데이터베이스 클리너를 사용할 필요가 없습니다. – binarymason

+0

차가움. 단위 테스트가 완료되었지만 문제가있을 것이라고는 생각하지 않습니다. 개발자는 Factory Girl을 사용하여 단위 및 기타 테스트를 작성하여 필요한 모든 데이터를 생성하고 db의 다른 데이터에 대한 특정 가정을 작성하지 않습니다. 이러한 테스트는 자신의 작은 거품으로 자신의 데이터를 작성/파괴해야합니다. 내 테스트의 의도는 그 기능을 하이 잭킹하여 실제로 테스트 데이터를 생성하는 유틸리티 인 특수하고 특별한 "테스트"를 호출하는 것입니다. 테스트가 끝나면 만든 데이터를 사용하여 UI 테스트를 실행합니다. –

관련 문제