3

スコープ「セッション」が必要なサービスがあります。だから私は単に使用します

class MyService {
  static scope = "session"
  ...
}

しかし、私の統合テストでは、正しく配線されません:

class MyServiceIntegrationSpec extends IntegrationSpec {
  def myService
  ...
}

私はいつもエラーが発生します:

「myService」という名前の Bean の作成中にエラーが発生しました: スコープ「セッション」は現在のスレッドに対してアクティブではありません。シングルトンから参照する場合は、この Bean のスコープ付きプロキシを定義することを検討してください。

私は何を間違っていますか?

4

1 に答える 1

1

「下位」スコープの Bean をシングルトンに注入することはできません。コントローラーをサービスに挿入したいようなものです。コントローラーはリクエストごとに作成されますが、サービスはアプリケーション用です (デフォルトでシングルトンの場合)。ここでは、さまざまなセッションを使用できますが、テスト用のシングルトンは 1 つだけです。テストでどのセッションのサービスを使用しますか?

Bean を注入する代わりに、コンテキストから Bean を取得することができます。

def grailsApplication

void testSomething() {
    given:
    def myService = grailsApplication.mainContext.getBean('myService')
...

テストの範囲をシングルトンからセッションに変更することでも問題は解決しますが、これが可能かどうかはわかりません。

于 2013-01-28T09:11:50.647 に答える