Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 实习AJAX单元测试_Javascript_Jquery_Ajax_Testing_Intern - Fatal编程技术网

Javascript 实习AJAX单元测试

Javascript 实习AJAX单元测试,javascript,jquery,ajax,testing,intern,Javascript,Jquery,Ajax,Testing,Intern,我遇到了一个问题,即Intern如何运行测试,以及如何尝试在jQuery中测试使用AJAX调用的单元。由于Intern将测试客户端服务于WebDriver服务器(在本例中为phantomjs--WebDriver=8910),因此我最终在localhost:9000上运行测试。这显然导致了同源政策问题 我可以绕过这个问题,提出跨域请求,但一旦需要身份验证cookie,我就会被阻止,因为我们的后端显然没有为localhost设置cookie,所以我无法访问这些cookie 我已尝试将proxyUr

我遇到了一个问题,即Intern如何运行测试,以及如何尝试在jQuery中测试使用AJAX调用的单元。由于Intern将测试客户端服务于WebDriver服务器(在本例中为
phantomjs--WebDriver=8910
),因此我最终在
localhost:9000
上运行测试。这显然导致了同源政策问题

我可以绕过这个问题,提出跨域请求,但一旦需要身份验证cookie,我就会被阻止,因为我们的后端显然没有为
localhost
设置cookie,所以我无法访问这些cookie

我已尝试将
proxyUrl
选项更改为以几种不同的排列方式指向我们的服务器,但到目前为止没有任何效果:

https://my.server.com/
https://my.server.com/js/
https://my.server.com/js/intern/
https://my.server.com/js/intern/client.html
https://my.server.com/js/intern/client.html?config=tests/intern
看着WebDriver日志,我注意到Intern告诉服务器加载
http://localhost:9000/__intern/client.html?config=...
。然后我尝试将
proxyUrl
设置为
https://my.server.com/js/
和symlink
\uuu intern
intern
,但要么测试没有运行,要么测试没有报告回
runner.js
。以这种方式运行时,PhantomJS日志如下所示:

[DEBUG - 2013-05-24T15:17:50.930Z] SessionReqHand - _postUrlCommand - Session '194ff0a0-c485-11e2-9c64-9986b0c95ae1' is about to load URL: https://my.server.com/js/__intern/client.html?config=tests%2Fintern&sessionId=194ff0a0-c485-11e2-9c64-9986b0c95ae1&reporters=webdriver
[DEBUG - 2013-05-24T15:17:50.943Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _execFuncAndWaitForLoadDecorator - Page Loading in Session: true
[DEBUG - 2013-05-24T15:17:50.962Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _oneShotCallback - onLoadFinished
[DEBUG - 2013-05-24T15:17:50.962Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _execFuncAndWaitForLoadDecorator - onLoadFinished: success
[DEBUG - 2013-05-24T15:17:51.051Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _execFuncAndWaitForLoadDecorator - Page Loading in Session: false
[DEBUG - 2013-05-24T15:17:51.051Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - _resetOneShotCallbacksDecorator
[DEBUG - 2013-05-24T15:17:51.052Z] SessionReqHand - _SuccessHandler - status: success
[DEBUG - 2013-05-24T15:17:51.184Z] Session [194ff0a0-c485-11e2-9c64-9986b0c95ae1] - page.onConsoleMessage - Tests complete
但是,测试运行程序会挂起并且永远不会收到测试结果,因为
proxyUrl
不会指向Intern运行的代理服务器

编辑5/28

值得一提的是,许多问题都可以通过后端修改来解决(虽然理想情况下,测试堆栈应该是可配置的,以适应代码库,而不是强制代码库符合要求),但是在这种情况下,这不是一个选项


理想情况下,我希望Intern可以配置为从指定的URL加载
client.html
,然后让reporter通过一些跨源兼容的方式(如JSONP)发布到
localhost:9000
代理。我找不到任何其他合理的替代方案,因此目前Intern似乎不完全支持通过AJAX与后端通信的单元测试。

当您更改Intern代理的URL以指向另一台服务器时,它需要是一个实际代理回运行在
localhost:9000
上的Intern服务器的服务器。它不能只是一个普通的Web服务器,带有指向Intern目录的符号链接

这样做与任何其他类型的代理到另一个后端(CouchDB、Apache、Node.js等)是一样的。对于nginx,它意味着使用to
proxy\u过程http://localhost:9000/;。对于Apache和
ProxyPass/http://localhost:9000/
。请记住,如果您不允许Intern服务器为您的JavaScript提供服务(即,您仅代理
\uuu Intern
),您将不会收到代码覆盖率数据,因此最好代理除您尝试测试的服务URL之外的所有内容


有关代理Intern测试Web服务的更多完整信息,请参见wiki页面。

似乎还有一个新的wiki页面概述了此信息:

谢谢!我以前没有想过使用反向代理,因为我们已经有了一个用于后端的代理,我认为它会成为阻碍,但研究它不应该是一个问题。