0

params を入力として受け取り、自動バインド用に params を渡すドメイン クラスを作成するサービス メソッドがあります。これのテストは、params をキーと値のペアのマップとして指定することで簡単に行えます。ただし、params マップで関連付けられたオブジェクトの配列をシミュレートする方法がわかりません。

クライアント側が次の形式でパラメーターを送信することを確認しました。

["description":"abc",  "subTask[0].name": "first subtask name"]

このタイプのパラメーターをモックするにはどうすればよいですか? これはコントローラ テストではないため、mockParams AFAIK を使用できません。

4

2 に答える 2

1

答えは次のとおりです。コントローラ パラメータ マップの解析は Service クラスでは利用できないため、値とオブジェクトを自分で変換する必要があります。したがって、私の例では、params マップ内に関連オブジェクトの配列を手動で作成する必要があります。以下に例を示します。

  def params = [ state: "Open", type: "Cable", 
            needByDate: new Date("Fri May 11 00:00:00 PDT 2012"),
            //"subTasks[0]":["name":"ABC"]  //no workie
            "subTasks": [new Task("name": "ABC")]
  ]
  mockDomain(Task.class)
  Task task= service.saveNewRequest(params)

これが誰かに役立つことを願っています。

于 2012-05-31T23:36:32.803 に答える
0

Grails の params マップは、ドットを含むパラメーター名で魔法のような処理を行い、コントローラーでそれらを「サブマップ」として使用できるようにします。たとえば、パラメータ ab=1 と ac=2 がある場合params.a、マップを要求して取得できます[b:1, c:2]。だから、次のようなことを試してください:

["description":"abc",  "subTask[0]":["name": "first subtask name"]]
于 2012-05-31T23:08:33.290 に答える