在测试期间更新Rails灯具

时间:2013-01-13 17:34:28

标签: ruby-on-rails redmine redmine-plugins

我在Rails中进行了功能测试(它是一个Redmine插件),这导致了我的问题:

fixtures :settings

test 'error is shown on issues#show when issue custom field is not set up' do
  setting = settings(:release_notes)
  setting.value = setting.value.
    update('issue_required_field_id' => 'garbage')
  #setting.save!

  get :show, :id => '1'

  assert_response :success
  assert_select 'div.flash.error',
    :text => I18n.t(:failed_find_issue_custom_field)
end

设置模型包含字段namevalue;在此特定设置中,该值是序列化的哈希值。此哈希中的一个键是issue_required_field_id,用于在show动作期间查找特定的IssueCustomField。如果没有带有此ID的自定义字段(因为我将其设置为字符串'garbage'),那么它应该呈现div.flash.error来解释发生了什么。

不幸的是,当setting.save!被注释掉时,测试失败,因为设置似乎没有更新 - 使用该设置的工作值(如settings.yml中所示),以及' div.flash.error'没有出现。如果我取消注释,则此测试通过,但其他测试失败,因为更改未在测试结束时回滚。

有没有办法修改这样的夹具,以便在测试结束时回滚任何更改?

注意:self.use_transactional_fixtures中的ActiveSupport::TestCase肯定设置为true(此测试用例为ActionController::TestCase,这是一个子类)

1 个答案:

答案 0 :(得分:0)

我弄清楚发生了什么 - 测试实际上是在事务上运行,但Redmine的Setting类有自己的缓存。将Setting.clear_cache!添加到测试的setup修复它。