2017-01-19 49 views
1

假设我有如下一种形式,它是通过Ajax提交:测试Ajax的提交表单

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");  
    } 
} 

编号: