我在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
设置模型包含字段name
和value
;在此特定设置中,该值是序列化的哈希值。此哈希中的一个键是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
,这是一个子类)
答案 0 :(得分:0)
我弄清楚发生了什么 - 测试实际上是在事务上运行,但Redmine的Setting类有自己的缓存。将Setting.clear_cache!
添加到测试的setup
修复它。