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
;があります。この特定の設定では、値はシリアル化されたハッシュです。このハッシュのキーの1つは、であり、これはショーアクション中にissue_required_field_id
特定のものを見つけるために使用されます。IssueCustomField
このIDのカスタムフィールドがない場合(文字列「garbage」に設定しているため、存在しないはずです)、何が起こったかを説明するdiv.flash.errorをレンダリングする必要があります。
残念ながら、setting.save!
がコメントアウトされると、設定が更新されていないように見えるため、テストは失敗します-その設定の作業値(settings.ymlに表示される)が使用され、「div.flash.error」は使用されませんtが表示されます。コメントを外すと、このテストは成功しますが、テストの終了時に変更がロールバックされないため、他のテストは失敗します。
テストの最後に変更がロールバックされるように、このようなフィクスチャを変更する方法はありますか?
注:self.use_transactional_fixtures
では間違いなくtrueに設定されていますActiveSupport::TestCase
(このテストケースはActionController::TestCase
、サブクラスである、です)