この質問で説明した問題と非常によく似た問題があります。(主な違いは、Grails 2.1を使用していることです)。
基本的に私は次のような単体テストを書きたいと思っています。
// set params so i can create an obj.
def results = controller.save()
// validate results or model/view
results = controller.edit(id, version)
ただし、これは機能しません。最初のメソッドアクション(保存)がリダイレクトをトリガーし、2番目のアクションもリダイレクトをトリガーし、CannotRedirectExceptionが発生するためです。メッセージ付き:
Cannot issue a redirect(..) here. A previous call to redirect(..) has already redirected the response.
これに対して提案された解決策(さまざまな場所で見つかります)は次のとおりです。
redirectArgs.clear()
ただし、これは機能しません。Grails2、redirectArgsが存在しないため、存在するのは
response.redirectUr
読み取りのみが可能で、書き込みはできません。
私はすでにこれらのことを(さまざまな組み合わせで)試しました:
response.reset()
clearGrailsWebRequest()
bindGrailsWebRequest()
cleanupGrailsWeb()
controller.redirect([:])
controller.redirect(null)
controller = new OfferObjectController()
controller = mockController(OfferObjectController)
すべて運がない。
私は他に何がうまくいく/助けることができるかという考えを完全に使い果たしました。どんな提案でも大歓迎です!
====編集====
私はそれを明確にするのを忘れました
response.reset()
ある種の作業では、別のアクションを呼び出すことができますが、前のアクションによって行われた変更を元に戻す/ロールバックするようです。これはまさに避けたいことです(必要な場合は、呼び出しを独自のテストに入れます[方法])。