4

假设我有一些代码JavaScript,用于jQuery.ajax调用服务器 REST API。

为了测试它,我想

  • 使用一个虚拟的 HTTP 服务器,它从静态 XML 文件中读取响应;
  • 运行JavaScript代码“无头”,即没有浏览器;
  • 在命令行中运行所有这些测试。

看起来我可以使用node.js嵌入式虚拟 HTTP 服务器。是否有意义?您知道此类项目的任何示例(在 github 或其他地方)吗?

4

2 回答 2

1

老实说,我还没有做过这样的事情,但我正在评估以下方法:

http://blog.stevensanderson.com/2010/03/30/using-htmlunit-on-net-for-headless-browser-automation/

这真的很有趣,我希望这个链接可以帮助你开始

于 2012-06-03T19:11:40.963 回答
1

使用 node.js 的主要问题是它没有提供浏览器将提供的所有东西……包括 XMLHttpRequest。

我正在开发一个我试图用 node.js 测试的库(专有的,仅供内部使用)。

对于缺乏 XHR 支持,我的解决方法是结合使用此 XHR 实现与一些 Microsoft 提供的代码,为旧 IE 添加标准 XHR 的向后兼容性

如果您使用的是 jQuery,那么您可能需要修改它,因为 jQuery 稍后会为旧 IE 添加自己的兼容性。

结果如下所示:

var XMLHttpRequest;

if (typeof window !== 'undefined') {
    XMLHttpRequest = window.XMLHttpRequest;
}
if (typeof XMLHttpRequest === "undefined") {
    console.log("Undefined"); (function() {
        try {
            XMLHttpRequest = new ActiveXObject("Msxml2.XMLHTTP.6.0");
        } catch(e) {}
        try {
            XMLHttpRequest = new ActiveXObject("Msxml2.XMLHTTP.3.0");
        } catch(e) {}
        try {
            XMLHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
        } catch(e) {}
        try {
            XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
        } catch(e) {}
        //Microsoft.XMLHTTP points to Msxml2.XMLHTTP and is redundant
        if (typeof XMLHttpRequest === "undefined") {
            throw new Error("This browser does not support XMLHttpRequest.");
        }
    })();
};

除此之外,在测试套件中运行一个简单的 HTTP 服务器是解决此类问题的常用方法。我还没有实现这一点,并且正在处理在测试服务器上运行的 httpd。

于 2012-06-03T19:27:43.267 回答