2013-02-07 2 views
1

ActiveRecord를 사용하여 sqlite db 파일에 정보를 저장하는 프로젝트가 있습니다. 나는 Rails를 사용하지 않고 AR은 그 일을 완벽하게 수행하는 것 같다. 제 질문은 클래스를 테스트하는 방법입니다. 트릭에 쓸 보석 (FactoryGirl, UnitRecord)을 찾았지만 Rails와 함께 작업해야합니다.레일즈없이 ActiveRecord를 테스트하는 방법은 무엇입니까?

Column = ActiveRecord::ConnectionAdapters::Column 
News.stubs(:columns).returns([Column.new(),...]) 

이 테스트를 할 수있는 올바른 방법인가 :

class News < ActiveRecord::Base 
belongs_to :feed 

def delete_old_news_if_necessary 
    # time_limit = Settings::time_limit 
    return if time_limit.zero? 

    News.destroy_all("date < #{time_limit}") 
end 

def delete_news_for_feed(feed_id) 
    News.destroy_all(:id => feed_id) 
end 

def news_for_feed(feed_id) 
    News.find(feed_id) 
end 
end 

나는 내가 열 스텁을 할 수있는 읽어? 또한, 테스트를 위해 별도의 db를 작성하고 테스트를 실행하고 삭제하는 것이 더 좋은가?

답변

1

시험에서 db를 치는 것을 피하려면 mocha 보석을 권할 수 있습니다. 스텁은 물론 기대를 정의 할 수 있습니다.

편집 : 테스트 데이터베이스를 사용하는 것이 더 나은시기에 관한 질문 : 나는 이유가 없을 때마다 말할 것입니다. :)

편집 : 예를 들어, 테스트에서이 같은 News.find을 조롱 할 수 있습니다

def news_for_feed_test 
    # define your expectations: 
    news = News.new 
    News.expects(:find).with(1).returns(news) 
    # call the method to be tested: 
    News.new.news_for_feed(1) 
end 

을이 확실하게하는 동시에, find은 정확히 한 번만 호출됩니다. 모카가 당신을 위해 할 수있는 많은 것들이 있습니다. 문서를보십시오. Btw., 너의 이런 방법들이 수업 방법이어야 해. 안 그래?

+0

모카를 사용하는 방법 중 하나에 대한 테스트를 통해 모범 사례에 대한 아이디어를 얻을 수 있습니까? –

+0

예제를 추가했습니다. – rausch

관련 문제