GWT JUnit测试 - 是否可以忽略同源策略

时间:2014-10-01 08:23:17

标签: java gwt junit same-origin-policy gwt-super-dev-mode

我正在尝试运行异步测试,需要向我的服务器发送请求,该服务器具有REST-API。所以我的问题是测试是在本地机器上执行的,但这显然违反了相同的原始策略,如果我尝试运行GWTtestCase,我会得到一个RuntimeError:

com.google.gwt.http.client.RequestPermissionException: The URL http://<url-to-my-rest-service> is invalid or violates the same-origin security restriction
    at com.google.gwt.http.client.RequestBuilder.doSend(RequestBuilder.java:394)
    at com.google.gwt.http.client.RequestBuilder.send(RequestBuilder.java:242)
    ...

我知道我可以手动运行这些测试,但是随着浏览器的最新更新(铬),GWT-Plugin被删除了。所以我不知道如何在SuperDevMode中启动测试。

问题:

  • 有没有办法忽略GWT JUnit测试的同源策略?
  • 我可以将用于测试的浏览器更改为Chrome / Chromium吗?
  • 如何在浏览器中使用SuperDevMode手动运行测试?

修改

如果我想手动运行测试,请将以下内容写入终端:

mvn gwt:test -Dgwt.args="-prod -userAgents safari -runStyle Manual:1"
然后,Maven将打印一个到终端的URL,我应该将其输入浏览器以执行测试:

http://127.0.1.1:57818/<my-package>.JUnit/junit-standards.html?gwt.codesvr=127.0.1.1:40387

但是如果我将此URL输入我的浏览器(Chromium),它会通知我当前没有安装GWT-Plugin。如果我删除问号后面的部分(就像我想在本地主机上运行SuperDevMode中的GWT代码)?gwt.codesvr=127.0.1.1:40387那么浏览器将只显示一个空白页面,如果我启动了代码服务器用:

mvn process-classes gwt:run-codeserver

codeserver-bookmarks(Dev Mode On)不起作用,GWT无法检测到可编译的模块&#34;。

问题:

那么我是如何用SuperDevMode编译JUnit-Test-Module的呢?

1 个答案:

答案 0 :(得分:1)

您无法绕过SOP,但您可以使用servlet代理对远程服务器的请求(在gwt.xml文件中使用<servlet>声明的servlet受JUnitShell支持。)

如果您想在Chrome / Chromium中运行测试,可以使用-runStyle ManualSelenium(注意:甚至还有custom run style for PhantomJS),因为DevMode不再有效,正如您所指出的,您必须以产品模式运行测试:-prod -userAgents safari