Estoy usando detox con pepino y la configuración funciona muy bien hasta el último momento de llamar a los ganchos de AfterAll. En el gancho hago lo siguiente:
AfterAll(async () => { console.log('CLEANING DETOX'); await detox.cleanup(); }); Para ejecutar Cucumber, uso el siguiente script de package.json :
"bdd": "cucumber-js --require-module @babel/register", El problema ocurre cuando interrumpo la ejecución del pepino por cualquier motivo. El gancho AfterAll no se ejecutará en este caso y la desintoxicación no borrará sus archivos obsoletos. Lo cual no sería un problema, pero la desintoxicación está usando el archivo ~/Library/Detox/device.registry.state.lock para rastrear qué simuladores está utilizando el corredor. Esencialmente, esto conduce a la desintoxicación lanzando constantemente nuevos dispositivos simuladores ya que este archivo nunca se borra. Pensé que podría crear un script de envoltura simple:
const { execSync } = require('child_process'); const detox = require('detox'); const stdout = execSync('cucumber-js --require-module @babel/register'); process.on('SIGINT', async function () { console.log('Cleanig up detox'); await detox.cleanup(); }); console.log(stdout); Sin embargo, eso tampoco funcionó, ya que detox.cleanup() solo elimina el archivo cuando tiene la configuración de detox.device . Lo que sucede en el gancho BeforeAll :
BeforeAll({ timeout: 120 * 1000 }, async () => { const detoxConfig = { selectedConfiguration: 'ios.debug2' }; // console.log('CONFIG::', detoxConfig); await detox.init(detoxConfig); await detox.device.launchApp(); }); La única idea que me queda es borrar manualmente el archivo. De alguna manera, debería poder obtener la ruta del archivo de bloqueo desde la desintoxicación interna. Mi preocupación acerca de este enfoque es una fuerte dependencia de la implementación de la desintoxicación. Por eso prefiero llamar a detox.cleanup .
EDITAR: terminé haciendo esta solución por ahora:
BeforeAll({ timeout: 120 * 1000 }, async () => { await startDetox(); }); async function startDetox() { const detoxConfig = { selectedConfiguration: 'ios.debug' }; const lockFile = getDeviceLockFilePathIOS(); unlink(lockFile, (err) => { if (err) { console.debug('Lock file was not deleted:::', err); } }); await detox.init(detoxConfig); await detox.device.launchApp(); }¿Me pregunto si alguien tiene una idea mejor?