2013-01-13 20 views
0

我在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 

的设定模型领域namevalue;在这个特定的设置中,该值是一个序列化的散列值。此散列中的一个键是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,这是一个子类)

回答

0

我摸索出了事情的原委 -​​ 测试实际表现事务,但管理平台的设置类有它自己的缓存。将Setting.clear_cache!添加到测试的setup固定它。

相关问题