2013-03-25 113 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

你到底想幹什麼?你以後的行爲是什麼?上述有些事情是錯誤的,但我並不完全清楚你的目標是什麼。 – 2013-03-25 00:50:51

+0

以上是我用來學習存根工作原理的一個例子。我想要做的是在'Book'類中創建一個'title'方法的存根用於測試。我目前還沒有創建'標題'方法,所以我只需要一個假的測試。 – perseverance 2013-03-25 00:56:54

回答

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

恕我直言,這將是一個工廠不是存根的好地方的例子。

假設的Rails 3.2,紅寶石1.9,捆綁

工廠女孩軌寶石添加到您的Gemfile。

創建工廠:

# 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。(build/create)。另外,如果您執行之前的任務,那麼最好使用after(或teardown)測試來刪除您創建的內容。

相關問題