0

注意:我只是发布这个问题,以便其他人在需要时可以找到它,因为我找到了一个很好的解决方案。

在我的控制器测试中,我不想提交到数据库,但我仍然希望控制器使用 finder 方法来获取模拟对象(通过模拟find方法),但是我想dom_id在这些模拟上使用assert_select,来验证他们正在被展示。

但是,由于它们是未保存的对象,因此dom_id会不断返回new_object而不是object_1,object_2等。

有什么快速的方法让它工作吗?我真的不想在测试中保留真实记录。

4

1 回答 1

0

假设您正在使用ActiveSupport::TestCaseFactoryGirl构建模型对象,您可以将其添加到您的test/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 回答