[tests] make detox + mocha optional peer deps
This commit is contained in:
parent
e19e87b0aa
commit
87e822cb53
121
tests-new/bridge/env/node/index.js
vendored
121
tests-new/bridge/env/node/index.js
vendored
@ -1,72 +1,81 @@
|
|||||||
/* eslint-disable no-param-reassign */
|
/* eslint-disable no-param-reassign,global-require */
|
||||||
global.bridge = {};
|
global.bridge = {};
|
||||||
require('./source-map');
|
require('./source-map');
|
||||||
|
|
||||||
const detox = require('detox');
|
|
||||||
const ws = require('./ws');
|
const ws = require('./ws');
|
||||||
const ready = require('./ready');
|
const ready = require('./ready');
|
||||||
const coverage = require('./coverage');
|
const coverage = require('./coverage');
|
||||||
|
|
||||||
/* ---------------------
|
let detox;
|
||||||
* DEVICE OVERRIDES
|
try {
|
||||||
* --------------------- */
|
detox = require('detox');
|
||||||
|
} catch (e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
|
||||||
let device;
|
if (detox) {
|
||||||
Object.defineProperty(global, 'device', {
|
/* ---------------------
|
||||||
get() {
|
* DEVICE OVERRIDES
|
||||||
return device;
|
* --------------------- */
|
||||||
},
|
|
||||||
set(originalDevice) {
|
|
||||||
// device.reloadReactNative({ ... })
|
|
||||||
// todo detoxOriginalReloadReactNative currently broken it seems
|
|
||||||
// const detoxOriginalReloadReactNative = originalDevice.reloadReactNative.bind(originalDevice);
|
|
||||||
originalDevice.reloadReactNative = async () => {
|
|
||||||
ready.reset();
|
|
||||||
global.bridge.reload();
|
|
||||||
return ready.wait();
|
|
||||||
};
|
|
||||||
|
|
||||||
// device.launchApp({ ... })
|
let device;
|
||||||
const detoxOriginalLaunchApp = originalDevice.launchApp.bind(
|
Object.defineProperty(global, 'device', {
|
||||||
originalDevice
|
get() {
|
||||||
);
|
return device;
|
||||||
originalDevice.launchApp = async (...args) => {
|
},
|
||||||
ready.reset();
|
set(originalDevice) {
|
||||||
await detoxOriginalLaunchApp(...args);
|
// device.reloadReactNative({ ... })
|
||||||
return ready.wait();
|
// todo detoxOriginalReloadReactNative currently broken it seems
|
||||||
};
|
// const detoxOriginalReloadReactNative = originalDevice.reloadReactNative.bind(originalDevice);
|
||||||
|
originalDevice.reloadReactNative = async () => {
|
||||||
|
ready.reset();
|
||||||
|
global.bridge.reload();
|
||||||
|
return ready.wait();
|
||||||
|
};
|
||||||
|
|
||||||
device = originalDevice;
|
// device.launchApp({ ... })
|
||||||
return originalDevice;
|
const detoxOriginalLaunchApp = originalDevice.launchApp.bind(
|
||||||
},
|
originalDevice
|
||||||
});
|
);
|
||||||
|
originalDevice.launchApp = async (...args) => {
|
||||||
|
ready.reset();
|
||||||
|
await detoxOriginalLaunchApp(...args);
|
||||||
|
return ready.wait();
|
||||||
|
};
|
||||||
|
|
||||||
/* -------------------
|
device = originalDevice;
|
||||||
* DETOX OVERRIDES
|
return originalDevice;
|
||||||
* ------------------- */
|
},
|
||||||
|
});
|
||||||
|
|
||||||
// detox.init()
|
/* -------------------
|
||||||
const detoxOriginalInit = detox.init.bind(detox);
|
* DETOX OVERRIDES
|
||||||
detox.init = async (...args) => {
|
* ------------------- */
|
||||||
ready.reset();
|
|
||||||
await detoxOriginalInit(...args);
|
|
||||||
return ready.wait();
|
|
||||||
};
|
|
||||||
|
|
||||||
// detox.cleanup()
|
// detox.init()
|
||||||
const detoxOriginalCleanup = detox.cleanup.bind(detox);
|
const detoxOriginalInit = detox.init.bind(detox);
|
||||||
detox.cleanup = async (...args) => {
|
detox.init = async (...args) => {
|
||||||
try {
|
ready.reset();
|
||||||
ws.close();
|
await detoxOriginalInit(...args);
|
||||||
} catch (e) {
|
return ready.wait();
|
||||||
// do nothing
|
};
|
||||||
}
|
|
||||||
await detoxOriginalCleanup(...args);
|
// detox.cleanup()
|
||||||
};
|
const detoxOriginalCleanup = detox.cleanup.bind(detox);
|
||||||
|
detox.cleanup = async (...args) => {
|
||||||
|
try {
|
||||||
|
ws.close();
|
||||||
|
} catch (e) {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
await detoxOriginalCleanup(...args);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
// setup after hook to ensure final context coverage is captured
|
// setup after hook to ensure final context coverage is captured
|
||||||
process.nextTick(() => {
|
process.nextTick(() => {
|
||||||
after(() => {
|
if (global.after) {
|
||||||
coverage.collect();
|
after(() => {
|
||||||
});
|
coverage.collect();
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
39
tests-new/bridge/env/node/source-map.js
vendored
39
tests-new/bridge/env/node/source-map.js
vendored
@ -1,12 +1,16 @@
|
|||||||
/* eslint-disable no-param-reassign */
|
/* eslint-disable no-param-reassign,global-require */
|
||||||
const Mocha = require('mocha');
|
let Mocha;
|
||||||
const ErrorStack = require('error-stack-parser');
|
try {
|
||||||
const { SourceMapConsumer } = require('source-map');
|
Mocha = require('mocha');
|
||||||
|
} catch (e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
|
||||||
let bundleFileName = null;
|
let bundleFileName = null;
|
||||||
const Runner = Mocha.Runner;
|
|
||||||
let sourceMapConsumer = null;
|
let sourceMapConsumer = null;
|
||||||
const originalFail = Runner.prototype.fail;
|
|
||||||
|
const ErrorStack = require('error-stack-parser');
|
||||||
|
const { SourceMapConsumer } = require('source-map');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Convert an error frame into a source mapped string
|
* Convert an error frame into a source mapped string
|
||||||
@ -23,8 +27,13 @@ function frameToStr(parsed) {
|
|||||||
parsed.columnNumber})`;
|
parsed.columnNumber})`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// override mocha fail so we can replace stack traces
|
/**
|
||||||
Runner.prototype.fail = function fail(test, error) {
|
* Convert an errors stack frames to their original source mapped positions
|
||||||
|
*
|
||||||
|
* @param error
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
|
function sourceMappedError(error) {
|
||||||
const original = error.stack.split('\n');
|
const original = error.stack.split('\n');
|
||||||
const parsed = ErrorStack.parse(error);
|
const parsed = ErrorStack.parse(error);
|
||||||
|
|
||||||
@ -37,10 +46,20 @@ Runner.prototype.fail = function fail(test, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
error.stack = newStack.join('\n');
|
error.stack = newStack.join('\n');
|
||||||
return originalFail.call(this, test, error);
|
return error;
|
||||||
};
|
}
|
||||||
|
|
||||||
|
if (Mocha) {
|
||||||
|
// override mocha fail so we can replace stack traces
|
||||||
|
const Runner = Mocha.Runner;
|
||||||
|
const originalFail = Runner.prototype.fail;
|
||||||
|
Runner.prototype.fail = function fail(test, error) {
|
||||||
|
return originalFail.call(this, test, sourceMappedError(error));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
sourceMappedError,
|
||||||
/**
|
/**
|
||||||
* Build a source map consumer from source map bundle contents
|
* Build a source map consumer from source map bundle contents
|
||||||
* @param str
|
* @param str
|
||||||
|
Loading…
x
Reference in New Issue
Block a user