在Grails集成测试中使用i18n

时间:2014-11-28 13:53:39

标签: grails internationalization integration-testing

假设我有一个使用i18n设置flash.message

的控制器方法
def someMethod(){
  // ...
  flash.message = message(code: 'label.generic.delete.ok.message', default: 'Delete OK')
  // ...
}

当我想编写一个集成测试来测试这个控制器时,我似乎无法找到如何测试该消息的值。

我的问题是我不想通过做类似的事情在测试中硬编码消息

assert controller.flash.message == "Delete successfull"

我宁愿做这样的事情

assert controller.flash.message == message(code: 'label.generic.delete.ok.message')

这会抛出groovy.lang.missingMethodException

我看过other answers here但是唯一的解决方案是单元测试。

我正在使用grails 2.2.4

是否有人知道如何在集成测试中访问message()

1 个答案:

答案 0 :(得分:1)

您可以在集成测试中测试i18消息:

在测试规范中注入bean messageSource并调用getMessage(String code, Object[] args, Locale locale)

下面

代码:查询,例如'calculator.noRateSet'和

args :在您的情况下,消息中的params将填充的参数数组,可以设置为null

区域设置:要在其中执行查找的区域设置 e.g

messageSource.getMessage('calculator.noRateSet', null, controller.request.getLocale())