因此,sinon测试框架具有函数sinon.useFakeXMLHttpRequest(),它将生成伪造的XMLHttpRequest对象。
我有一个实现modules.extensions的javascript文件。我可以将XMLHttpRequest的任何实现传递到该javascript文件中。所以基本上是一个polyfill?
// app.js
function getAjaxCallData(url) {
let xhr = new XMLHttpRequest();
// ... work done here
return resultBody;
}
。
// custom.js
if (this.modules) { // node js
// app.js: let customAjaxRequest = require("custom")(require("xmlhttprequest").XmlHttpRequest);
this.modules.exports = function(xmlHttpRequest) {
if (xmlHttpRequest) this.XMLHttpRequest = xmlHttpRequest;
return { getAjaxCallData: getAjaxCallData};
}
}
来自代码中的评论。您是否注意到XMLHttpRequest是如何传递到javascript文件的?
让customAjaxRequest = 要求("自定义&#34)(要求(" XMLHttpRequest的"。)的XmlHttpRequest);
我的困境是需要(" xmlhttprequest")。XmlHttpRequest是一个类。而sinon.useFakeXMLHttpRequest()是一个函数。
我想要类似的东西:
让customAjaxRequest = 要求("自定义&#34)(wrapAsClass(sinon.useFakeXMLHttpRequest));
有没有办法创建一个只能在"新XMLHttpRequest()"上工作的类?是调用sinon.useFakeXMLHttpRequest()并返回它而不是正在创建的对象?或者创建一个空对象...并调用sinon.useFakeXMLHttpRequest()并将其所有内容复制到空的新创建的对象中?
答案 0 :(得分:0)
找到它。您只需使用该函数,就好像它是一个类。这是有道理的。因为在ES6之前,通过使用函数定义了一个类。但我不确定在函数中返回一个对象会产生什么影响。使用this.property = value;在函数中是如何添加属性。至少当你没有在函数中返回任何东西时。
class Rectangle {
constructor(width, height) {
this.width = width;
this.height = height;
}
}
let y = function(width, height) { return new Rectangle(width, height); };
document.getElementById("output1").innerHTML = JSON.stringify(new Rectangle(15, 17));
document.getElementById("output2").innerHTML = JSON.stringify(new y(5, 7)); // It works!!!

<div id="output1"></div>
<div id="output2"></div>
&#13;
输出
{&#34;宽度&#34;:15,&#34;高度&#34; 17}
{&#34;宽度&#34;:5,&#34;高度&#34;:7}