1

を使用して実行しているテストのスタブの作成に問題がありますminitest (4.7.0)。以前のSOの質問から調査したものから次のことを試しましたが、機能しません。

test / model / 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'

app / models / 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-railsgemを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。(ビルド/作成)を活用できることに注意してください。また、beforeタスクを実行する場合は、after(または分解)テストで作成したものを削除することをお勧めします。

于 2013-03-29T15:07:56.007 に答える