Как проверить AjaxFormChoiceComponentUpdatingBehavior в WicketTester - PullRequest
7 голосов
/ 30 мая 2011

В своем приложении Wicket я использовал одну радиокнопку с опциями «да» и «нет».Если я выберу «Нет», я должен отобразить один выпадающий выбор.Я написал код, используя AjaxFormChoiceComponentUpdatingBehavior.Как мне протестировать это с помощью WicketTester?

Ответы [ 6 ]

4 голосов
/ 02 августа 2012

Решение для Wicket 1.5.x:

 AbstractAjaxBehavior behavior = (AbstractAjaxBehavior)WicketTesterHelper.
          findBehavior(getTester().getComponentFromLastRenderedPage("path:to:component"),
                        AjaxFormChoiceComponentUpdatingBehavior.class);
 getTester().executeBehavior(behavior);
2 голосов
/ 31 июля 2013

Сначала выберите нужный переключатель.

form.select("path to radio button", 0/1)

Затем выполните поведение ajax:

tester.executeBehavior((AbstractAjaxBehavior)tester.getComponentFromLastRenderedPage("path to radio buttons").getBehaviors().get(0));
1 голос
/ 23 июня 2016

Вот мой фрагмент кода, который отлично работает для меня с полем выбора, но должен также указывать переключатель, если вы измените класс поведения. Необходимые шаги:

  • Вставить новое значение в форму (используйте FormTester)
  • Найти поведение
  • Выполнить поведение при изменении

Вот пример кода:

//simulate insert new value
FormTester formTester = tester.newFormTester(PANEL_ID + FORM); 
formTester.setValue("selectBox", "newValue");
//Find onchange behaviour
AjaxFormComponentUpdatingBehavior behavior = 
       (AjaxFormComponentUpdatingBehavior) WicketTesterHelper.findBehavior(
       tester.getComponentFromLastRenderedPage(PANEL_ID + FORM + ":" + "selectBox"), 
       ajaxFormComponentUpdatingBehavior.class);
//execute onchange
tester.executeBehavior(behavior);

Я пропустил пар, как обновить значение формы в предыдущих ответах.

0 голосов
/ 07 марта 2012

Это оказывается несколько болезненным, по крайней мере, в Wicket 1.4 (я не пробовал с 1.5).

С помощью веб-поиска я нашел подсказки в блоге Миши Дасберга ,По сути, вы не можете использовать метод BaseWicketTester.executeAjaxEvent((String componentPath, String event), потому что используемое вами поведение не является AjaxEventBehavior, и вы не можете использовать BaseWicketTester.executeBehavior(final AbstractAjaxBehavior behavior), потому что он стирает параметры запроса.

Решением Миши было реализовать собственный метод executeBehavior в родительском тестовом примере, который работал для его ситуации, но не для моей необходимости, поскольку предполагалось, что идентификатор параметра запроса совпадает с полным путем к компоненту.

Я сделал нечто подобное, реализовав собственный executeAjaxBehavior в расширении WicketTester, но предполагая (как это верно в моем случае), что параметр запроса является последним разделенным ":" разделом пути компонента:

public void executeAjaxBehavior(String path, String value) {
    AbstractAjaxBehavior behavior = (AbstractAjaxBehavior) getComponentFromLastRenderedPage(path).getBehaviors().get(0);
    CharSequence url = behavior.getCallbackUrl(false);
    WebRequestCycle cycle = setupRequestAndResponse(true);
    getServletRequest().setRequestToRedirectString(url.toString());
    String[] ids = path.split(":");
    String id = ids[ids.length-1];
    getServletRequest().setParameter(id, value);
    processRequestCycle(cycle);
}

И его решение, и мое (на основе его) также предполагают, что поведение является первым (или единственным) в компоненте.

Это немного неуклюже, но что-то вроде этого может сработать для вас.

Возможно, было бы лучше, если бы идентификаторы и поведение были получены отдельно и переданы в качестве параметров, и, конечно, вам лучше было бы найти первое поведение, которое на самом деле было AjaxFormChoiceComponentUpdatingBehavior, вместо того, чтобы беспечно предполагать, что оно было первымповедение, но это только начало.

Это также код, аналогичный тому, что находится внутри класса BaseWicketTester для других методов тестирования поведения, которые, возможно, стоит изучить.

0 голосов
/ 29 января 2012

Попробуйте что-то вроде этого: tester.executeAjaxEvent("form:myRadioButtonId", "onchange");

0 голосов
/ 29 октября 2011

Если переключатель находится на форме, я думаю, вам следует использовать класс FormTester:

http://wicket.apache.org/apidocs/1.4/org/apache/wicket/util/tester/FormTester.html

Пример теста отправки формы Ajax вы можете посмотреть по адресу:

http://www.java2s.com/Open-Source/Java-Document/J2EE/wicket-1.4/org/apache/wicket/ajax/form/AjaxFormSubmitTest.java.htm

...