0

注:私はこの質問を投稿しているのは、他の人が必要なときに見つけられるようにするためです。私は良い解決策を見つけました。

私のコントローラーテストでは、データベースにコミットしたくありませんが、コントローラーがファインダーメソッドを使用して(メソッドをモックすることによって)モックオブジェクトを取得することを望んでいますが、検証するために、でそれらのモックでfind使用したいと思いますそれらが表示されていること。dom_idassert_select

ただし、これらは保存されていないオブジェクトであるため、、、などの代わりに戻りdom_id続けます。new_objectobject_1object_2

それを機能させるための簡単な方法はありますか?私は本当にテストで実際の記録を保持したくありません。

4

1 に答える 1

0

モデルオブジェクトを構築するために使用していると仮定すると、これをファイルに追加ActiveSupport::TestCaseできます。FactoryGirltest/test_helper.rb

# Generate model with id - useful for assert_select with dom_id
def model(name, options = {})
  @next_id = {} if @next_id.nil?
  @next_id[name] = 1 unless @next_id.has_key(name)

  m = build(name, options)
  m.id = @next_id[name]
  @next_id[name] += 1
  m
end

次に、RRモックライブラリとして使用しているとすると、次のようなことができます。

test 'something' do
  posts = [model(:post), model(:post)]
  mock(Post).all { posts }
  get :index
  assert_select "##{dom_id(posts.first)}", posts.first.title
end
于 2012-09-26T19:18:42.280 に答える