Gwt junit 测试没有初始化 $wnd.jQuery
Gwt junit test does not initialize $wnd.jQuery
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)
...
GWTTestCases 使用它们自己的 HTML 主页(因为,从技术上讲,您可能甚至没有一个,或者不是静态的),所以如果您需要 jQuery 进行测试,您必须从测试本身加载它(例如使用 ScriptInjector
,从您的测试方法或从 gwtSetUp()
)
感谢 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
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) ...
GWTTestCases 使用它们自己的 HTML 主页(因为,从技术上讲,您可能甚至没有一个,或者不是静态的),所以如果您需要 jQuery 进行测试,您必须从测试本身加载它(例如使用 ScriptInjector
,从您的测试方法或从 gwtSetUp()
)
感谢 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