我有一个看起来像这样的控制器动作
//An action inside itemUserController
def commentItem() {
String comment = params['itemComment']
User user = session['currentUser']
String title = params['title']
def isBook = false, isTVShow = false, isMovie = false
//I do some manips here......
//and finally...
if(isBook)
redirect(controller: "book", action: "show", id: book.id)
if(isMovie)
redirect(controller: "movie", action: "show", id: movie.id)
if(isTVShow)
redirect(controller: "TVShow", action: "show", id: tvShow.id)
}
我的问题是测试这个,在单元测试和集成中尝试但在包含重定向的行中有相同的错误“NullPointerException”(看起来像重定向内的书,电影和TVShow控制器是空的,我不知道关于如何注入它们,因为它们不是控制器类中的字段。)
java.lang.NullPointerException
at ivvq.ItemUserController.$tt__commentItem(ItemUserController.groovy:138)
以下是我在测试类中的代码部分:
when: "User tries to comment an item with an empty comment title and an empty comment text"
itemUserController.session['currentUser'] = user;
itemUserController.params['itemComment'] = ""
itemUserController.params['title'] = ""
itemUserController.params['itemBookId'] = book.id
itemUserController.commentItem()
then: "The user has an error message and the comment isnt posted"
itemUserController.flash.error != ""
很快,我打算做的是让用户对一个项目发表评论,并在评论提交后对相同的项目进行评论。
注意:我正在使用Grails 2.3.11
答案 0 :(得分:0)
我遇到了类似的情况,最终改变了我的重定向风格。现在我使用这样的东西:
redirect(uri: "/controller/action", params: redirectParams)
根据您的情况,重定向看起来像:
redirect(uri: "/book/show", params: [id: book.id])
注意:我没有对此进行测试,但它应该非常接近。 params
只是要发送到下一个方法的参数图。在我的所有单元测试中,这对我有用。
重定向样式的文档为here,如果有用的话。