2009-04-06 3 views
10

레일즈 컨트롤러와 뷰에서 사용할 수있는 보석을 만들고 있습니다. 보석을 독립적으로 테스트 할 수 있기를 바랍니다. 그러나 Rails 애플리케이션에서 보석이 작동하는지 테스트하기 위해 Rails 인스턴스를 작성하는 방법을 알아 내지 못했습니다.레일 아래의 루비 보석 테스팅

나는 RSpec을 강력히 선호하지만 아마도 Test :: Unit 솔루션을 채택하거나 Test :: Unit을 사용할 수 있습니다.

필자는 Rails 플러그인과 비슷한 솔루션에 관심이 있습니다.

(Google에서 시도했지만 "레일 보석 테스트"는 테스트에 사용되는 보석을 보여 주며 보석을 테스트하는 방법이 아닙니다.이 항목에 대한 기사 또는 2 개를 본 것으로 확신합니다.)

답변

12

다른 플러그인 (플러그인 및 보석, 같은 것) 테스트 스위트를 살펴보십시오.

활성 레코드를 향상시키는 테스트 플러그인은 매우 쉽습니다. use Active Record anywhere이 될 수 있으므로이 경우 Active Record를 데이터베이스 (예 : 메모리 내장 sqlite 데이터베이스)에 연결하고 codez를 테스트하면됩니다.

# test/test_helper.rb 
$LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib') 
require 'your_thing' 

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

ActiveRecord::Schema.define(:version => 1) do 
    create_table :posts do |t| 
    t.string :title 
    t.text :excerpt, :body 
    end 
end 

class Post < ActiveRecord::Base 
    validates_presence_of :title 
end 

# test/my_test.rb 
require 'test_helper' 

class MyTest < Test::Unit::TestCase 
    def test_thing 
    # use Post here 
    end 
end 

컨트롤러 동작 등을 테스트하려는 경우 어려워집니다. My live validations plugin은 많은 것들을 조롱하고 ERb 뷰를 문자열로 전달할 수있는 꽤 광범위한 테스트 스위트를 가지고 있습니다.

이러한 Test :: Unit 예제를 RSpec에 적용하는 것은 Test :: Unit의 모든 것을 피기 백 (piggyback)하지 않으므로 간단해야합니다.

+0

이것은 매우 도움이되었습니다. 감사! ActiveRecord를로드 (ala spec_server 또는 spork)하여 ActiveRecord를로드하고 매번 데이터베이스를 만들 때 내 테스트가 너무 느려지지 않도록하는 방법이 있습니까? – Chinasaur

+0

그렇게 할 수있는 방법이있을 것입니다. 내 라이브 유효성 검사 플러그인 사용과 같은 메모리 저장 공간 대신 ​​sqlite3 파일 저장소를 사용하는 경우 .sqlite3 데이터베이스 파일이 있는지 여부를 확인할 수 있습니다. –

+0

이 작업은 저에게 매우 효과적입니다. 메모 : 1) 내 테스트 프레임 워크 (rspec)와 sqlite3을 gemspec (물론 런타임 종속성으로 레일)에 개발 종속성으로 추가해야했습니다. 2) 테스트 헬퍼에서 '레일'& 'active_record'를 필요로했습니다. 잘 –