我遇到了使用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
答案 0 :(得分: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
答案 1 :(得分:0)
恕我直言,这将是一个工厂不是存根的好地方的例子。
将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)。此外,如果您执行之前的任务,则可以通过后续(或拆卸)测试删除您创建的内容。