corepack/tests/setupTests.js

67 lines
1.7 KiB
JavaScript

/* global expect, beforeEach, afterEach */
const crypto = require(`crypto`);
const fs = require(`fs`);
const nock = require(`nock`);
const path = require(`path`);
const v8 = require(`v8`);
const getNockFile = () => path.join(__dirname, `nock/${crypto.createHash(`md5`).update(expect.getState().currentTestName).digest(`hex`)}.dat`);
const ACCEPTED_HEADERS = new Set([`Content-Type`, `Content-Length`]);
function filterHeaders(headers) {
if (!Array.isArray(headers))
return headers;
const filtered = [];
for (let t = 0; t < headers.length; t += 2)
if (ACCEPTED_HEADERS.has(headers[t].toLowerCase()))
filtered.push(headers[t], headers[t + 1]);
return filtered;
}
switch (process.env.NOCK_ENV || ``) {
case `record`: {
nock.recorder.rec({
// eslint-disable-next-line @typescript-eslint/camelcase
dont_print: true,
// eslint-disable-next-line @typescript-eslint/camelcase
output_objects: true,
});
beforeEach(() => {
nock.recorder.clear();
});
afterEach(() => {
const nockCallObjects = nock.recorder.play();
for (const req of nockCallObjects)
if (typeof req !== `string`)
req.rawHeaders = filterHeaders(req.rawHeaders);
const serialized = v8.serialize(nockCallObjects);
fs.mkdirSync(path.dirname(getNockFile()), {recursive: true});
fs.writeFileSync(getNockFile(), serialized);
});
} break;
case `replay`: {
nock.disableNetConnect();
beforeEach(() => {
const data = fs.readFileSync(getNockFile());
const nockCallObjects = v8.deserialize(data);
nock.define(nockCallObjects);
});
} break;
case ``: {
// Nothing
} break;
default: {
throw new Error(`Invalid NOCK_ENV variable`);
}
}