2011-01-05 4 views
0

내가 사용하고있는 레거시 데이터베이스로 인해 MyISAM을 사용하여 MySQL이 작동하지 않아 내 테이블이 트랜잭션을 지원하지 않습니다. 이는 테스트에 의해 생성 된 테이블 데이터 (테스트를 통해 factory_girl을 사용하고 있습니다)가 각 시나리오에 대해 되돌려지지 않기 때문에 테스트가 실패하게됩니다.Rspec에서 트랜잭션 픽스처를 비활성화하면 아무 효과가 없습니다.

Rspec이 spec_helper.rb의 config.use_transactional_fixtures 구성 설정을 노출한다는 사실을 발견했습니다.

기본적으로 true로 설정됩니다. 거짓으로 설정하면 테스트에 아무런 영향을주지 않습니다. 중복 된 레코드로 인해 여전히 실패합니다.

DB에 대한 변경 사항을 자동으로 언 롤링하지 않겠습니까? 아니면 내가 수동으로해야하나요?

답변

1

당신이 맞아요 - 데이터베이스가 트랜잭션을 지원하지 않는 경우 당신은 몇 가지 SQL 각 문 앞에 데이터를 닦아 명령을 실행해야합니다 : 당신의 각 테이블에 대한

TRUNCATE TABLE tablename; 

하나. 당신의 helper.rb에서

이 시도 :

Spec::Runner.configure do |config| 
    config.before(:each) do 
    tables = %{users posts tags} 
    tables.each do |t| 
     ActiveRecord::Base.connection.execute('TRUNCATE TABLE #{t}') 
    end 
    end 
    ... 
end 
+0

쿨, 감사; 나는 Rails가 어떻게 든 이것을 자동화한다는 인상하에 있었다. –

관련 문제