我的网络应用程序利用 Geb 进行功能测试。
它是一个非英语应用程序,所有页面消息都是从 i18n 消息包接收的。
如何让 Geb 处理国际化消息?
我的网络应用程序利用 Geb 进行功能测试。
它是一个非英语应用程序,所有页面消息都是从 i18n 消息包接收的。
如何让 Geb 处理国际化消息?
Grails RemoteControl 插件允许远程访问正在运行的 Grails 应用程序。在功能测试设置中,它可用于读取和更改配置设置,访问应用程序上下文,包括消息源,……。
下面的代码被添加到我们所有的 Geb 规范/测试的通用基类中,可以在单个测试中使用以检索国际化消息:
class BaseTest/Spec {
RemoteControl remoteControl = new RemoteControl()
String msg(String msgKey, args = null, locale = defaultLocale) {
if (args != null) {
args = args as Object[]
}
return remoteControl.exec {
ctx.messageSource.getMessage(msgKey, args, locale)
}
}
}
我所有的页面类都从基类扩展:ScaffoldPage
import java.util.ResourceBundle;
import geb.Page
class ScaffoldPage extends Page {
static content = {
resourceBundle {
ResourceBundle bundle = new PropertyResourceBundle(new InputStreamReader(new FileInputStream('./grails-app/i18n/messages_ru.properties'), "UTF-8"))
bundle
}
}
}
然后,在某个页面,我使用这样的结构:
class CreatePayeePage extends ScaffoldPage {
static at = {
title == resourceBundle.getString('payee.title.create.label')
}
}