2013-03-25 112 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)测试来删除您创建的内容。

相关问题