2013-01-13 48 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固定它。

相關問題