2013-03-25 2 views
1

minitest (4.7.0)을 사용하여 실행중인 테스트 용 스텁을 만드는 데 문제가 있습니다. 나는 이전 SO 질문에서 연구 한 것을 난에서 다음을 시도하고 그것은 작동하지 않습니다minitest를 사용하여 스텁을 만드는 올바른 방법은 무엇입니까?

테스트/모델/book_test.rb

Book.stub :title, "War and Peace" do 
    book = Book.new 
    book.title.must_equal "War and Peace" 
end 

오류

NameError: undefined method 'title' for `Book' 

응용 프로그램/모델/book.rb

class Book 
#I tried adding the following according to the github readme but it doesn't work: 
#def title.fake_method 
#end 
end 
+0

정확히 스텁을 시도하고 있습니까? 당신이 겪고있는 행동은 무엇입니까? 위의 내용에는 몇 가지 잘못된 점이 있지만 목표가 무엇인지에 대해서는 명확하지 않습니다. –

+0

위의 예는 스텁이 작동하는 방법을 배우는 데 사용한 예입니다. 내가하고 싶은 것은 테스트를 위해 사용할'Book' 클래스의'title' 메소드의 스텁을 만드는 것입니다. 나는 현재'title' 메소드를 아직 만들지 않았으므로 테스트를 위해 가짜 메소드 만 필요합니다. – perseverance

답변

1

귀하의 사례에서 스텁하려는 이유/왜 저에게 이상적이지는 않지만 아래의 내용은 귀하가 수행 한 테스트에 적용됩니다.

require 'minitest/autorun' 

class StubbedBook 
    def title 
    "War and Peace" 
    end 
end 

class BookTest < MiniTest::Unit::TestCase 
    def test_title_is_war_and_peace 
    book = StubbedBook.new 
    assert_equal book.title, "War and Peace" 
    end 
end 
0

IMHO 이것은 스텁이 아닌 공장을위한 좋은 장소의 예입니다.

이 Gemfile에 공장 소녀 레일 보석을 추가 레일 3.2, 루비 1.9, 그리고 들러 가정. 당신의 전 행동 (또는 설치)에서

# test/factories/book_factory.rb 
FactoryGirl.define do 
    factory :book do 
    title "book title" 
    end 
end 

당신의 단위 테스트에서 :

공장을 만듭니다.

before do 
    @book = FactoryGirl.build(:book) 
end 

또는 사용자 정의 제목하려면 :

before do 
    @book = FactoryGirl.build(:book, title: "random title") 
end 

는 그런 다음 테스트에서이 인스턴스 변수를 사용할 수 있습니다.

원하는 경우 개별 테스트에서 FactoryGirl (빌드/생성)을 활용할 수 있습니다. 또한 사전 작업을 수행하는 경우 애프터 (또는 분해) 테스트로 작성한 것을 삭제하는 것이 좋습니다.

관련 문제