1

我在为正在运行的测试创建存根时遇到问题minitest (4.7.0)。我从以前的 SO 问题中研究过的内容尝试了以下内容,但它不起作用:

测试/模型/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
4

2 回答 2

2

您尝试在示例中存根的内容/原因对我来说并不完全合理,但是以下内容将起作用,并且似乎涵盖了您所追求的测试。

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
于 2013-04-01T04:20:27.807 回答
0

恕我直言,这将是工厂而不是存根的好地方的一个例子。

假设 Rails 3.2、ruby 1.9 和 bundler

将 factory-girl-rails gem 添加到您的 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)。此外,如果您执行之前的任务,那么最好的做法是删除您使用之后(或拆卸)测试创建的内容。

于 2013-03-29T15:07:56.007 回答