精通Grails: 测试 Grails 应用程序 - 编程入门网
urn val.after(obj.checkIn)
})
}
//the rest of the class remains the same
}
val 变量是当前的字段。obj 变量表示当前的 HotelStay 实例。Groovy 将 before() 和 after() 方 法添加到所有 Date 对象,所以这个验证仅返回 after() 方法调用的结果。如果 checkOut 发生在 checkIn 之后,验证返回 true。否则,它返回 false 并触发一个错误。 现在,输入 grails run-app。确保不能创建一个 checkOut 日期早于 checkIn 日期的新 HotelStay 实例。如图 10 所示: 图 10. 默认的定制验证错误消息 打开 grails-app/i18n/messages.properties,并向 checkOut 字段添加一个定制验证消息: hotelStay.checkOut.validator.invalid=Sorry, you cannot check out before you check in。 保存 messages.properties 文件并尝试保存有缺陷的 HotelStay。您将看到如清单 11 所示的错误消 息: 清单 11. 定制验证错误消息 精通Grails: 测试 Grails 应用程序(10)时间:2011-07-29 IBM Scott Davis现在应该编写测试了,如清单 12 所示: 清单 12. 测试定制的验证
测试定制的 TagLib 接下来是最后一个需要处理的用户场景。您已经在 create 和 edit 视图中成功地处理了 checkIn 和 checkOut 的时间戳部分,但它在 list 和 show 视图中仍然是错误的,如图 12 所示: 图 12. 默认的 Grails 日期输入(包括时间戳) 最简单的解决办法是定义一个新的 TagLib。您可以利用 Grails 已经定义的 <g:formatDate> 标记,但创建一个自己的定制标记也很容易。我想创建一个可以以两种方式使用的 <g:customDateFormat> 标记。 一种形式的 <g:customDateFormat> 标记打包一个 Date,并接受一个接受任何有效 SimpleDateFormat 模式的定制格式属性: <g:customDateFormat format="EEEE">${new Date()}</g:customDateFormat> 因为大多数用例都以美国的 “MM/dd/yyyy” 格式返回日期,所以如果没有特别指定,我将采用这种 格式: <g:customDateFormat>${new Date()}</g:customDateFormat> 精通Grails: 测试 Grails 应用程序(11)时间:2011-07-29 IBM Scott Davis现在,您已经知道了每个用户场景的需求,那么请输入 grails create-tag-lib Date(如清单 13 所 示),以创建一个全新的 DateTagLib.groovy 文件和一个相应的 DateTagLibTests.groovy 文件: 清单 13. 创建一个新的 TagLib
将清单 14 中的代码添加到 DateTagLib.groovy: 清单 14. 创建定制 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |