如何国际化Grails Geb测试

时间:2012-10-22 10:07:23

标签: grails functional-testing geb

我的网络应用程序使用Geb进行功能测试。

这是一个非英语应用程序,所有页面消息都是从i18n消息包中接收的。

如何让Geb使用国际化消息?

2 个答案:

答案 0 :(得分:3)

Grails RemoteControl plugin允许远程访问正在运行的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)
        }
    }
}

答案 1 :(得分:0)

我的所有页面类都从基类扩展: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')
    }
}