【问题标题】:Test Ajax-submit a form in Apache Wicket测试 Ajax - 在 Apache Wicket 中提交表单
【发布时间】:2017-01-19 13:09:26
【问题描述】:

假设我有一个如下所示的表单,它是通过 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();        
    }
}

但问题是,当我运行单元测试时,从未到达设置断点的行。不知道出了什么问题?

【问题讨论】:

    标签: java ajax forms unit-testing wicket


    【解决方案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");    
        }
    }
    

    参考:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-01-30
      • 2015-07-09
      • 1970-01-01
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多