【问题标题】:GWT JUnit Test - Is it possible to ignore same-origin policyGWT JUnit Test - 是否可以忽略同源策略
【发布时间】:2014-11-26 00:59:52
【问题描述】:

我正在尝试运行异步测试,并且需要向我的服务器发送一个请求,该服务器具有 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)
    ...

我知道我可以手动运行这些测试,但是随着我的浏览器 (chromium) 的最新更新,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

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

mvn process-classes gwt:run-codeserver

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

问题:

那么,如何使用 SuperDevMode 编译 JUnit-Test-Module?

【问题讨论】:

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


    【解决方案1】:

    您无法绕过 SOP,但您可以使用 servlet 将请求代理到远程服务器(在您的 gwt.xml 文件中使用 &lt;servlet&gt; 声明的 servlet 由 JUnitShell 支持)。

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

    【讨论】:

    • 感谢您的回答,我将尝试在外部浏览器中以生产模式手动运行测试。但是我还有两个问题:我认为在 servlet 上测试也应该失败,因为 servlet 仍然部署在 localhost 上,但 REST-API 服务器不是 - 对吧?我不需要为生产模式手动运行代码服务器吗?就像我在 SuperDevMode 中在 localhost 上运行 GWT 代码时一样?
    猜你喜欢
    • 2012-08-22
    • 2012-12-30
    • 2016-05-22
    • 2012-03-13
    • 2013-07-20
    • 1970-01-01
    • 2023-01-30
    • 2011-01-17
    相关资源
    最近更新 更多