首页 文章

Gwt junit测试没有初始化$ wnd.jQuery

提问于
浏览
0

inputmask与gwt结合使用方式如下:

public class JQueryMask {

    public native static void setMask(Element elem,String mask) /*-{

        $wnd.jQuery(elem).find("input").inputmask(mask);
        $wnd.jQuery(elem).find("input").change(function(e) {

            });
    }-*/;

    public native static void removeMask(Element elem) /*-{
        $wnd.jQuery(elem).find("input").inputmask("remove");

    }-*/;


    public native static void setMaskWithGreadyFalse(Element elem,String mask) /*-{

    $wnd.jQuery(elem).find("input").inputmask({mask:mask,greedy:false});
    $wnd.jQuery(elem).find("input").change(function(e) {

            });

    }-*/;

}

当窗口小部件初始化并且一切都在浏览器中工作时,将调用此方法 . jQuery变量未初始化,这会产生相同的异常:

console.log($wnd.jQuery());

也:

console.log($wnd.$());

这是:

com.google.gwt.core.client.JavaScriptException: (null) @assembly.gwtlib.gui.plugins.JQueryMask::removeMask(Lcom/google/gwt/dom/client/Element;)([JavaScript object(77)]): null
    at com.google.gwt.dev.shell.BrowserChannelServer.invokeJavascript(BrowserChannelServer.java:249)
    at com.google.gwt.dev.shell.ModuleSpaceOOPHM.doInvoke(ModuleSpaceOOPHM.java:136)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNative(ModuleSpace.java:576)
    at com.google.gwt.dev.shell.ModuleSpace.invokeNativeVoid(ModuleSpace.java:304)
    at com.google.gwt.dev.shell.JavaScriptHost.invokeNativeVoid(JavaScriptHost.java:107)
    at assembly.gwtlib.gui.plugins.JQueryMask.removeMask(JQueryMask.java)
    at assembly.gwtlib.gui.widget.input.Input.setMask(Input.java:54)
    at assembly.gwtlib.gui.widget.input.DateInput.(DateInput.java:76)
    ...

2 回答

  • 1

    GWTTestCases使用他们自己的HTML主机页面(因为,从技术上讲,你甚至可能没有,或者不是静态的),所以如果你需要jQuery用于测试,你必须从测试本身加载它(例如使用 ScriptInjector ,来自您的测试方法或来自 gwtSetUp()

  • 0

    感谢Thomas Broyer,我实现了以下代码:

    Callback c=new Callback() { 
    
            @Override
            public void onSuccess(Void result) {
                 ScriptInjector.fromUrl("urlTo/jquery.inputmask.js").setWindow(ScriptInjector.TOP_WINDOW).setCallback(new Callback<Void, Exception>() {
    
                    @Override
                    public void onSuccess(Void result) {
    
    
                        //Your tests
                    }
    
                    @Override
                    public void onFailure(Exception reason) {
                        reason.printStackTrace();
                        junit.framework.Assert.fail(reason.getMessage());
    
    
                    }
                }).inject();
    
            }
    
            @Override
            public void onFailure(Exception reason) {
                reason.printStackTrace();
                junit.framework.Assert.fail(reason.getMessage());
    
            }
        };
        ScriptInjector.fromUrl("urlTo/jQuery-2.1.4.min.js").setWindow(ScriptInjector.TOP_WINDOW).setCallback(c).inject();//setWindow(ScriptInjector.TOP_WINDOW) is important
    

相关问题