2012-03-30 6 views
2

마이 그 레이션의 일부로 생성 된 테이블을 활용하는 마이 그 레이션 생성기와 많은 모델, 클래스 등이 포함 된 Gem에서 작업하고 있습니다.Gem 내의 테스트는 마이 그 레이션 생성기를 테스트하고 테스트를 위해 마이 그 레이션을 적용해야합니다.

마이 그 레이션 생성기 자체를 테스트하기는 쉽지만 충분히 완료된 튜토리얼이 있습니다. 실제로 테스트 DB에서 마이 그 레이션을 실행하는 방법을 배우고 있습니다. 보석이 테스트 데이터와 상호 작용합니까?

보석에는 schema.rb가 없기 때문에 어떻게해야하는지 잘 모르겠습니다.

답변

1

이 내가 코드 마이그레이션을 실행하는 방법입니다;

생성 된 마이 그 레이션이 포함 된 문자열이있는 경우 테스트 설정에서 이와 같은 작업을 수행 할 수 있습니다.

ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:") 
    ActiveRecord::Migration.verbose = false 

    # Or however you intend to grab the output of the migration generator 
    migration_string = ERB.new(File.read(<file name here>)).result 

    migration = Class.new(ActiveRecord::Migration) 
    migration.class_eval(migration_string) 
    migration.new.migrate(:up) 

생성 한 이전을 사용하여 마이그레이션 된 데이터베이스를 제공해야합니다.

0

당신은 같은 것을 할 수 있습니다 : 당신이 액티브를 사용한다고 가정하기 위하여려고하고있다

. 당신은 설정 A의 메모리 데이터베이스한다 테스트 헬퍼 그래서 :

require 'active_record' 

# Connection must be establised before anything else 
ActiveRecord::Base.establish_connection(
    :adapter => defined?(JRUBY_VERSION) ? 'jdbcsqlite3' : 'sqlite3', 
    :database => ':memory:' 
) 

그런 다음 테스트에서 레이크 작업을 호출합니다. 이 같은 보일 것이다 :

require 'rake' 
requie File.expand_path('../Rakefile', __FILE__) # you'll need to modify this path to actually point to the Rakefile 

Rake::Task['db:migrate'].invoke 

레이크 TAKS 호출이 안된입니다,하지만 올바른 방향을 가리켜 야합니다.

다른 옵션은 단지 명령을 실행하는 것입니다 :

%x{rake db:migrate} 
관련 문제