2

如何使用 RSpec 和 Mocha 模拟 ActsAsTaggableOn::tag ?我是 Rails 测试的新手,所以我可能会遗漏一些明显的东西......

我试过了 :

/spec/controllers/books_controller.rb

it "should return 2 categories whith books" do

      tag_ruby = mock_model(ActsAsTaggableOn::Tag, :name => 'ruby', :context => 'category')
      tag_java = mock_model(ActsAsTaggableOn::Tag, :name => 'java', :context => 'category')

      ActsAsTaggableOn::Tag.stubs(:with_context).returns([tag_ruby, tag_java])

      get 'books_by_categories'
      assigns(:books_by_categories).should be_empty
end

/app/controllers/books_controller

  def books_by_categories
    @books_by_categories = ActsAsTaggableOn::Tag.with_context('category').all.map { |category|
      {:name => category.name, :books => category.books.visibles.limit(10)}
    }
  end

我得到:

Failure/Error: tag_ruby = mock_model(ActsAsTaggableOn::Tag, :name => 'ruby', :context => 'category')
     Mocha::ExpectationError:
       unexpected invocation: #<Mock:ActsAsTaggableOn::Tag_1001>.__mock_proxy()
       unsatisfied expectations:
       - expected exactly once, not yet invoked: #<Mock:ActsAsTaggableOn::Tag_1001>.id(any_parameters)
       - expected exactly once, not yet invoked: #<Mock:ActsAsTaggableOn::Tag_1001>.name(any_parameters)
       - expected exactly once, not yet invoked: #<Mock:ActsAsTaggableOn::Tag_1001>.marked_for_destruction?(any_parameters)
       - expected exactly once, not yet invoked: #<Mock:ActsAsTaggableOn::Tag_1001>.valid?(any_parameters)
       - expected exactly once, not yet invoked: #<Mock:ActsAsTaggableOn::Tag_1001>.persisted?(any_parameters)
       - expected exactly once, not yet invoked: #<Mock:ActsAsTaggableOn::Tag_1001>.context(any_parameters)
       - expected exactly once, not yet invoked: #<Mock:ActsAsTaggableOn::Tag_1001>.destroyed?(any_parameters)
       - expected exactly once, not yet invoked: #<Mock:ActsAsTaggableOn::Tag_1001>.blank?(any_parameters)
4

0 回答 0