最初に、OPTIONS 要求を処理し、CORS に必要なヘッダーを応答に適用するコントローラーを実装しました。最近、コードをクリーンアップして、CORS 用のインターセプターを作成しました。そのクリーンアップの一部は、OPTIONS 要求のコントローラー メソッドを削除することです。
ただし、私の mockmvc テストでは、OPTIONS 処理メソッドが存在する必要がありますが、実際にアプリを実行すると、OPTIONS 要求用のコントローラー メソッドがなくても、インターセプター チェーンが OPTIONS 要求を処理します。
こんな試験を期待したい
MockHttpServletRequestBuilder optionsRequest = options("the-url");
this.mockMvc.perform(optionsRequest).
andExpect(status().isOk()).
andExpect(header().string("Access-Control-Allow-Origin", "*")).
andExpect(header().string("Access-Control-Allow-Methods", "OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT")).
andExpect(header().string("Access-Control-Allow-Headers", "content-type"));
私のテスト設定があれば合格する
StandaloneMockMvcBuilder builder = MockMvcBuilders.standaloneSetup(this.controller);
builder = builder.dispatchOptions(true);
builder = builder.addInterceptors(new CorsInterceptor());
それか、実行中のアプリでクロスオリジンリクエストが機能していないことを期待しています。