0

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

設定モデルにはフィールドnamevalue;があります。この特定の設定では、値はシリアル化されたハッシュです。このハッシュのキーの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、サブクラスである、です)

4

1 に答える 1

0

テストは実際にはトランザクション的に動作していましたが、Redmine の Setting クラスには独自のキャッシュがあります。Setting.clear_cache!テストに追加するとsetup修正されました。

于 2013-04-04T13:53:40.370 に答える