mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-25 09:34:04 +02:00
3e363fed8b
You can only consume a response once - thereafter the response body becomes "locked" and will throw an error if you try. https://stackoverflow.com/questions/53511974/javascript-fetch-failed-to-execute-json-on-response-body-stream-is-locked
98 lines
2.8 KiB
JavaScript
98 lines
2.8 KiB
JavaScript
/* globals chai:false */
|
|
/* eslint no-extend-native:off */
|
|
iD.debug = true;
|
|
|
|
// disable things that use the network
|
|
iD.data.imagery = [];
|
|
for (var k in iD.services) { delete iD.services[k]; }
|
|
|
|
// run with a minimal set of presets for speed
|
|
iD.data.presets = {
|
|
presets: {
|
|
area: { name: 'Area', tags: {}, geometry: ['area'] },
|
|
line: { name: 'Line', tags: {}, geometry: ['line'] },
|
|
point: { name: 'Point', tags: {}, geometry: ['point'] },
|
|
vertex: { name: 'Vertex', tags: {}, geometry: ['vertex'] },
|
|
relation: { name: 'Relation', tags: {}, geometry: ['relation'] },
|
|
// for tests related to areaKeys:
|
|
building: { name: 'Building', tags: { building: 'yes' }, geometry: ['point', 'area'] },
|
|
man_made: { name: 'Man Made', tags: { man_made: '*' }, geometry: ['vertex', 'point', 'line', 'area'] }
|
|
}
|
|
};
|
|
|
|
|
|
mocha.setup({
|
|
ui: 'bdd',
|
|
globals: [
|
|
'__onresize.tail-size',
|
|
'__onmousemove.zoom',
|
|
'__onmouseup.zoom',
|
|
'__onkeydown.select',
|
|
'__onkeyup.select',
|
|
'__onclick.draw',
|
|
'__onclick.draw-block'
|
|
]
|
|
});
|
|
|
|
expect = chai.expect;
|
|
|
|
window.d3 = iD.d3; // TODO: remove if we can avoid exporting all of d3.js
|
|
|
|
// Workaround for `Array.from` polyfill in PhantomJS
|
|
// https://github.com/openstreetmap/iD/issues/6087#issuecomment-476219308
|
|
var __arrayfrom = Array.from;
|
|
Array.from = function(what) {
|
|
if (what instanceof Set) {
|
|
var arr = [];
|
|
what.forEach(function(v) { arr.push(v); });
|
|
return arr;
|
|
} else {
|
|
return __arrayfrom.apply(null, arguments);
|
|
}
|
|
};
|
|
|
|
|
|
// Add support for sinon-stubbing `fetch` API
|
|
// (sinon fakeServer works only on `XMLHttpRequest`)
|
|
// see https://github.com/sinonjs/nise/issues/7
|
|
//
|
|
// None of the alternatives really worked well,
|
|
// so I'm just pasting the `fake-fetch` methods here.
|
|
// - https://github.com/msn0/fake-fetch
|
|
// - https://github.com/wheresrhys/fetch-mock
|
|
|
|
window.fakeFetch = {
|
|
install: function () {
|
|
sinon.stub(window, 'fetch');
|
|
},
|
|
restore: function () {
|
|
window.fetch.restore();
|
|
},
|
|
getUrl: function () {
|
|
return window.fetch.firstCall.args[0];
|
|
},
|
|
getOptions: function () {
|
|
return window.fetch.firstCall.args[1] || {};
|
|
},
|
|
getMethod: function () {
|
|
return this.getOptions().method || 'get';
|
|
},
|
|
getBody: function () {
|
|
return this.getOptions().body || '';
|
|
},
|
|
getRequestHeaders: function () {
|
|
return this.getOptions().headers || {};
|
|
},
|
|
respondWith: function (data, options) {
|
|
return window.fetch.callsFake(function() {
|
|
return Promise.resolve(new Response(data, options));
|
|
});
|
|
}
|
|
};
|
|
|
|
Object.defineProperty(
|
|
window.fakeFetch, 'called', {
|
|
get: function() { return !!window.fetch.firstCall; }
|
|
}
|
|
);
|