gpt4 book ai didi

javascript - 实习生 AJAX 单元测试

转载 作者:行者123 更新时间:2023-11-29 22:13:29 25 4
gpt4 key购买 nike

我在实习生如何运行测试和尝试测试使用 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/ 并将符号链接(symbolic link) __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,然后让报告者通过一些交叉 POST 到 localhost:9000 代理-origin-compatible 意味着,比如 JSONP。我找不到任何其他合理的替代方案,所以目前看来 Intern 根本不完全支持通过 AJAX 与后端通信的单元测试。

最佳答案

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

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

有关代理 Intern 以测试 Web 服务的更多完整信息,请参见维基页面 Using Intern to unit test Ajax calls .

关于javascript - 实习生 AJAX 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16739642/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com