gpt4 book ai didi

unit-testing - 在使用render的 Controller 方法进行单元测试期间,Grails无法在空对象上调用getTimeZone()

转载 作者:行者123 更新时间:2023-12-02 14:49:24 26 4
gpt4 key购买 nike

我在测试 Controller 方法时遇到问题。

@Transactional
def saveComment(){
BlogPost post = BlogPost.findById(params.id)
Comment comment = new Comment(author:params.author,comment:params.comment)
comment.save(flush:true)
post.addToComments(comment)
post.save(flush:true)
post.refresh()
render(template:'commentsTemplate', collection:post.comments.reverse())
}

当它尝试渲染模板时就会出现问题。
<div class="row">
<span>
<font color="red"><b><span class="comment-author">${it.author}</span></b> <span class="comment-date-created" title="${it.dateCreated}"><g:formatDate format="MMM dd, yyyy" date="${it.dateCreated}"/> at <g:formatDate format="hh:mm aaa" date="${it.dateCreated}"/></span></font>
</span>
</div>
<div class="comment-text row">${it.comment}</div>
<hr>
<br>

它引发以下错误:
org.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Error processing GroovyPageView: [views/blogPost/_commentsTemplate.gsp:3] Error executing tag <g:formatDate>: Cannot invoke method getTimeZone() on null object

当我在调试器模式下单步执行代码时,肯定会填充日期,并且我的实际应用程序可以正常工作。只是这个单元测试失败了。
void "Test that the saveComment action adds a comment to the blog post"(){
when:
populateValidParams(params)
BlogPost post = new BlogPost(params)
post.save(flush: true, validate: false)
params.author = 'Author'
params.comment = 'This is a comment'
params.id = 1
params.dateCreated = new Date()
params.post = post
controller.saveComment()
Comment comment = post.comments[0]

then:
post.comments.size() == 1
comment.author == 'Author'
comment.comment == 'This is a comment'
}

我只是想尽办法解决问题可能遇到的麻烦。特别是据我所知,评论的日期对象肯定存在并且具有时区。

最佳答案

要解决此问题,请在groovy文件的静态块中使用以下代码:

静态doWithSpring = {
grailsTagDateHelper(DefaultGrailsTagDateHelper)
}

关于unit-testing - 在使用render的 Controller 方法进行单元测试期间,Grails无法在空对象上调用getTimeZone(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41103842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com