Testing Grails:使用多个/带前缀的参数进行集成测试,例如(params[“book”])

Testing Grails:使用多个/带前缀的参数进行集成测试,例如(params[“book”]),testing,grails,groovy,integration-testing,params,Testing,Grails,Groovy,Integration Testing,Params,我在nabble上问了完全相同的问题 我正在尝试在控制器集成测试中发送参数或不同的域。 但无法让它们绑定到前缀为“book”的域类 //正在测试的控制器动作 def saveBook = { def book = new Book() bindData(book, params["book"], [include: ['publicPrivacy', 'description', 'title']) } //集成测试- def bookController = BookContoller()

我在nabble上问了完全相同的问题

我正在尝试在控制器集成测试中发送参数或不同的域。 但无法让它们绑定到前缀为“book”的域类

//正在测试的控制器动作

def saveBook = {
def book = new Book()
bindData(book, params["book"], [include: ['publicPrivacy', 'description', 'title'])
}
//集成测试-

def bookController = BookContoller()
//Doesn't Bind
bookController.params.publicPrivacy = false
bookController.params.description = "Best book in the world"
bookController.params.title = "The world"

bookController.params.book.publicPrivacy = false
bookController.params.book.description = "Best book in the world"
bookController.params.book.title = "The world"

bookController.params["book"].publicPrivacy = false
bookController.params.[book.description] = "Best book in the world"

bookController.saveBook()

如何设置前缀为的“params”发送到控制器,以便它们绑定到域

为了使params名称空间有效,我必须对params对象使用一个。例如:

def p = ['book.description': "Best book in the world", ...]
def request = [getParameterMap: { -> p }] as javax.servlet.http.HttpServletRequest

controller.params = new org.codehaus.groovy.grails.web.servlet.mvc.GrailsParameterMap(request)
controller.saveBook()

这真的是一个集成测试吗?也许只是在功能测试或单元测试中使用MockDomain和MockController。否,因为我在“保存簿”操作中使用的是实时数据库和其他服务方法。我只提供了一个小片段来让大家了解这个想法,那么你知道如何在bookController上设置前缀参数吗?请注意,参数列表中的所有内容都必须标记为“.toString()”例如。[“book.boolean”:true.toString()]