我在Rails的功能测试Rails更新固定装置(它是一个管理平台插件),这是造成我的问题:在测试过程中
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
,用于在演出过程中查找特定的IssueCustomField
。如果没有这个ID的自定义字段(这不应该是,因为我已经将它设置为字符串'垃圾'),那么它应该呈现一个div.flash.error解释发生了什么。
不幸的是,当setting.save!
被注释掉,测试失败,因为设置似乎没有被更新 - 使用该设置的工作值(如settings.yml中显示),'div.flash .error'不会出现。如果我取消注释,则此测试通过,但其他测试失败,因为更改在测试结束时未回滚。
有没有像这样修改夹具的方法,以便在测试结束时回滚任何更改?
注:self.use_transactional_fixtures
肯定是设置为true ActiveSupport::TestCase
(这测试用例是一个ActionController::TestCase
,这是一个子类)