2014-11-14 2 views
1

Я пишу тестовые примеры огурца в грабли. Я хочу получить доступ к сообщениям, которые настроены в файле message.propertiesИспользование сообщений I18N в тестах огурцов в Грайле

например. У меня есть свойство настраивается в файле message.properties как:

view.user.page.title = View user 

У меня есть шаг огуречный ViewUserSteps.groovy

Given(~'^I looged in into the app$') { -> 
    //code related to login 
} 
When(~'^I click view users tab"$') { -> 
    // click user tab logic 
} 
Then(~'^I see I am on View User page$') { -> 
    at ViewUserPage 
} 

И ViewUserPage.groovy является

import geb.Page 
import grails.util.Holders 
class ViewUserPage extends Page{ 
    static url = "${Holders.config.app.url}/users/view" 
    static at = { 
     waitFor(30,2) { 
      title == "Edit user" // this title should be fetched from message.properties file 
     } 
    } 
} 

Здесь в ViewUserPage I должен иметь возможность получить заголовок, который настроен в message.properties. Что-то вроде g.message (код: 'view.user.page.title') или каким-либо другим способом, чтобы, если я изменяю message.properties, не нужно менять тестовый пример. Есть предположения?

+0

Возможно, это не ответ на ваш вопрос, но вы не должны полагаться на файл messages.properties в своих тестах. Лучше добавить некоторую информацию, связанную с тестированием, в ваш html, например ' ...' и проверить существование 'body.test-edit-user'. –

+0

Спасибо за комментарий. Не могли бы вы рассказать мне, почему мы не должны полагаться на экстернализацию сообщений? Я не уверен, что добавление класса к определенному элементу и утверждение его было бы хорошей идеей. Здесь мое требование - проверить название страницы. –

+0

Каждый раз, когда кто-то меняет/обновляет заголовок, ваш тест не удастся. Я считаю, что имеет смысл проверить правильность логики приложения (отображается правая страница). Проверка переводов должна проводиться переводчиками, а не программистами. В конце концов, если вам действительно нужно проверить этот заголовок, лучше проверить «ключ», который используется для целей перевода, а не сам перевод. Возможно, вы могли бы заменить поведение g.message на тестовой фазе, чтобы всегда возвращать «код»? –

ответ

0

Вы можете запросить bean messageSource, что текст, а затем сравнить его с результатом запроса.

Это может выглядеть следующим образом (с responseData.errors.username является результатом запроса (т.е. When шага):

Then(~'^an error message is shown that the user name is already used$') {-> 
    assert responseData.errors.username.contains (message ('user.username.unique')) 
} 

message небольшая вспомогательная функция, чтобы получить текст сообщения:

String message (String code) { 
    getBean ('messageSource').getMessage (code, null, null) 
} 

Мы добавили message к World объекта, так что он автоматически становится доступным шагом.

+0

Спасибо, Мартин Хаунер, Это сработало. –

Смежные вопросы