2017-01-19 7 views
1

Предположим, у меня есть форма, как показано ниже, которое передается с помощью Ajax:Test Ajax-отправить форму в Apache Wicket

import org.apache.wicket.request.mapper.parameter.PageParameters; 
import org.apache.wicket.markup.html.form.Form; 
import org.apache.wicket.ajax.AjaxRequestTarget; 
import org.apache.wicket.ajax.form.AjaxFormSubmitBehavior; 
import org.apache.wicket.markup.html.WebPage; 

public class FormPage extends WebPage { 
    public FormPage(final PageParameters parameters) { 
     Form form = new Form("myForm"); 
     // Ajax submit 
     form.add(new AjaxFormSubmitBehavior("onsubmit") { 
      @Override 
      protected void onSubmit(AjaxRequestTarget target) { 
       super.onSubmit(target); // Breakpoint on this line 
      } 
     }); 
     add(form); 
    } 
} 

Теперь мне нужно проверить форму и установить контрольную точку в onSubmit методе , Вот код теста:

import org.apache.wicket.util.tester.FormTester; 
import org.apache.wicket.util.tester.WicketTester; 
import org.junit.Before; 
import org.junit.Test; 

public class TestFormPage { 
    private WicketTester tester; 

    @Before 
    public void setUp() { 
     tester = new WicketTester(new WicketApplication()); 
    } 

    @Test 
    public void homepageRendersSuccessfully() { 
     tester.startPage(FormPage.class); 
     tester.assertRenderedPage(FormPage.class); 

     FormTester formTester = tester.newFormTester("myForm"); 
     formTester.submit();   
    } 
} 

Но проблема в том, когда я запускаю тест блока, линия с точкой останова набором никогда не достигается. Интересно, что происходит не так?

ответ

1

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

formTester.submit(); 

Для того, чтобы запустить Ajax представить событие, WicketTester # executeAjaxEvent следует использовать вместо этого, как показано ниже:

import org.apache.wicket.util.tester.WicketTester; 
import org.junit.Before; 
import org.junit.Test; 

public class TestFormPage { 
    private WicketTester tester; 

    @Before 
    public void setUp() { 
     tester = new WicketTester(new WicketApplication()); 
    } 

    @Test 
    public void homepageRendersSuccessfully() { 
     tester.startPage(FormPage.class); 
     tester.assertRenderedPage(FormPage.class); 

     tester.executeAjaxEvent("myForm", "submit");  
    } 
} 

Ref: