假设我有一些代码JavaScript
,用于jQuery.ajax
调用服务器 REST API。
为了测试它,我想
- 使用一个虚拟的 HTTP 服务器,它从静态 XML 文件中读取响应;
- 运行
JavaScript
代码“无头”,即没有浏览器; - 在命令行中运行所有这些测试。
看起来我可以使用node.js
嵌入式虚拟 HTTP 服务器。是否有意义?您知道此类项目的任何示例(在 github 或其他地方)吗?
假设我有一些代码JavaScript
,用于jQuery.ajax
调用服务器 REST API。
为了测试它,我想
JavaScript
代码“无头”,即没有浏览器;看起来我可以使用node.js
嵌入式虚拟 HTTP 服务器。是否有意义?您知道此类项目的任何示例(在 github 或其他地方)吗?
老实说,我还没有做过这样的事情,但我正在评估以下方法:
http://blog.stevensanderson.com/2010/03/30/using-htmlunit-on-net-for-headless-browser-automation/
这真的很有趣,我希望这个链接可以帮助你开始
使用 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。