Grails のドキュメントには次のように記載されています。
Grails は、統合テスト中にアクションを呼び出すときに、インターセプターまたはサーブレット フィルターを呼び出しません。必要に応じて機能テストを使用して、インターセプターとフィルターを分離してテストする必要があります。
これは単体テストにも当てはまります。コントローラーのアクションは、定義されたインターセプターの影響を受けません。
あなたが持っていると仮定すると:
def afterInterceptor = [action: this.&interceptAfter, only: ['actionWithAfterInterceptor','someOther']]
private interceptAfter(model) { model.lastName = "Threepwood" }
インターセプターをテストするには、次のことを行う必要があります。
目的のアクションにインターセプトが適用されていることを確認する
void "After interceptor applied to correct actions"() {
expect: 'Interceptor method is the correct one'
controller.afterInterceptor.action.method == "interceptAfter"
and: 'Interceptor is applied to correct action'
that controller.afterInterceptor.only, contains('actionWithAfterInterceptor','someOther')
}
インターセプター メソッドが目的の効果を持つことを確認する
void "Verify interceptor functionality"() {
when: 'After interceptor is applied to the model'
def model = [firstName: "Guybrush"]
controller.afterInterceptor.action.doCall(model)
then: 'Model is modified as expected'
model.firstName == "Guybrush"
model.lastName == "Threepwood"
}
または、インターセプターがない場合は、何もないことを確認します
void "Verify there is no before interceptor"() {
expect: 'There is no before interceptor'
!controller.hasProperty('beforeInterceptor')
}
これらの例は、インターセプターの後にテストするためのものでしたが、インターセプターの前にも同じことが適用されます。