2010-07-15 2 views
1

필자가 테스트하는 시스템은 분리 된 테스트 사례를 작성하는 것이 시간과 리소스를 낭비하는 데 충분할만큼 복잡합니다. 그래서, 나는 서로를 쌓기 위해 나의 시험이 필요하다.Ruby on Rails : 오이 : 데이터베이스 클리너를 끄려면 어떻게해야합니까?

그러나 예를 들어, 내 단계 정의 중 하나에서 User.new를 가져올 때마다 시나리오가 완료되면 사용자가 DB에서 제거됩니다.

db : test : prepare를 강제하지 않으면 내 모든 정보를 어떻게 유지합니까?

기능/지원/env.rb에서
ENV["RAILS_ENV"] ||= 'test' 
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment') 

require 'cucumber/formatter/unicode' # Remove this line if you don't want Cucumber Unicode support 
require 'cucumber/rails/world' 
require 'cucumber/rails/active_record' 
require 'cucumber/web/tableish' 
require 'cucumber/rails/rspec' 
require 'rake' 



require 'capybara/rails' 
require 'capybara/cucumber' 
require 'capybara/session' 
require 'cucumber/rails/capybara_javascript_emulation' # Lets you click links with onclick javascript handlers without using @culerity or @javascript 
require 'database_cleaner' 
require 'database_cleaner/cucumber' 
DatabaseCleaner.strategy = :transaction 

@subscription_plan = Factory(:subscription_plan) 
@subscription_plan.save! 

Capybara.default_selector = :css 
Capybara.default_wait_time = 2 
Capybara.javascript_driver = :culerity 
Capybara.current_driver = :culerity 
Capybara.default_host = "cucumber.test.com" #for Rack::Test 
Capybara.app_host = "cucumber.test.com" #if Capybara.current_driver == :culerity 

Cucumber::Rails::World.use_transactional_fixtures = false 

답변

0

이 선해야한다 :

내 env.rb 거짓에

Cucumber::Rails::World.use_transactional_fixtures = true 

설정하는 것이, 그리고 데이터베이스 절단 해야 중지.

편집 :이 작업은 실패 했으므로 데이터를 유지해야하는 기능 파일에 @no-txn 태그를 추가하십시오. Cucumber가 시나리오를 트랜잭션에 래핑하지 않도록하기 위해 예약 된 태그 인 것 같습니다.

+1

2013 내 env.rb 파일을 추가했습니다. 내 DB에 아직 데이터가 없습니다 ... 르 부. T_T – NullVoxPopuli

+0

데이터를 유지해야하는 지형지 물 파일에 @ no-txn 태그를 추가하십시오. Cucumber가 시나리오를 트랜잭션에 래핑하지 않도록하기 위해 예약 된 태그 인 것 같습니다. – davidcelis

+1

@ no-txn 작동하지 않음 = \ 정말 이상합니다 – NullVoxPopuli

6

테스트를 서로 수행하면 각 테스트가 자체 테스트를 수행 할 수 없으며 테스트가 누출 된 상태 (많은 테스트 결과가 잘못됨)가되기 때문에 끔찍한 생각입니다. 깨끗한 슬레이트에서 시험을 시작할 수없는 경우에는 더 많은 원자를 만드십시오.

이제 상황이 나아지면서 설명대로 판단하면 시스템을 제대로 테스트하지 못합니다.

+2

이 점을 명확히하기 위해 테스트가 아닌 이전 단계 정의를 재사용하도록하십시오. – Houen

+1

동의 - "테스트 할 시스템이 충분히 복잡합니다 ..."는 정당화됩니다. 특정 데이터로 시드 (seed) 된 데이터가 필요하다면 (항상 데이터를 저장하기 위해)'Background' 정의와 같이 Cucumber에서 사용할 수있는 중복 제거 도구를 사용하거나 시나리오를 실행하기 전에 알려진 데이터 세트로 데이터베이스를로드하십시오 . 또한 테스트가 서로 균형을 이루어야한다고 생각하면 이전 테스트가 중단 된 상태에서 시작하는 테스트입니다. Cucumber에서 애플리케이션 상태를 시뮬레이트하는 방법이 있습니다. 테스트 자체는 항상 무국적이어야합니다. – jefflunt

+1

@normalocity : 더 나 자신을 더 잘 표현할 수 없었습니다. :) 나는 당신이 "합리화"가 아니라 "정당화"를 의미한다고 생각하는 것을 제외하고. –

1

은 그냥 Gemfile에서

gem 'database_cleaner' 

을 제거하여 기능

+0

이 태그가 지정된 시나리오에 대해서만 database_cleaner가 해제됩니다. 이것은 database_cleaner를 완전히 끄지 않습니다. –

+0

다음 내 답변에서 완전히 해제하는 해결책이 있습니다. –

+0

이것은 작동하지 않습니다. – Trip

2

에 @ 어떠한 데이터베이스 클리너를 시도하지 않습니다.

NameError 예외가 발생한 경우 체크 아웃 active_record 파일을 확인하십시오.

cucumber-rails gem의 자동 종속성으로 인해 database_cleaner 보석이 사용되었습니다.

+0

작동하지 않습니다. 죄송합니다. – Trip

2

데이터베이스 클리너에는 ORM 라이브러리와 함께 사용할 수있는 null 전략 (전혀 클리닝하지 않음 )이 포함되어 있습니다. 도 전략을 nil로 설정하여 명시 적으로 사용할 수 있습니다. 년 11 월 (12) 등

https://github.com/bmabey/database_cleaner