Tengo una configuración de prueba automatizada escrita en javascript usando jasmine y ejecutando pruebas en paralelo. Las pruebas se ejecutan con el siguiente comando:
protractor-flake --max-attempts=2 -- ./config/configfile.js --suite $SUITE "$@";Dentro del archivo de configuración, configuramos todos los reporteros de jasmine, listas de todos los conjuntos de pruebas, pero también otros requisitos previos, como una clase que proporciona información sobre todos los indicadores de funciones diferentes que están activados o desactivados según el entorno. Los indicadores de características se obtienen mediante una llamada a la API que se produce en un método en configfile.js justo antes de que se ejecuten las pruebas. Intenté crear un singleton y devolver la misma instancia, pero estoy haciendo algo mal o cada nuevo subproceso/proceso creará una nueva instancia, incluso si es un singleton. Bellow es una versión simplificada de la clase singleton.
class FeatureFlagConfiguration { async getFlags() { if (FeatureFlagConfiguration.instance === undefined) { const client = new Client(); this.flags = await client.getFlags(); this.moreInfo = await client.getMoreInfo(); FeatureFlagConfiguration.instance = this; Object.freeze(FeatureFlagConfiguration.instance); } } evaluateFlags() { ... } isFeatureFlagEnabled() { ... } } module.exports = new FeatureFlagConfiguration();Intente usar una variable global en su lugar, como se sugiere aquí: https://stackoverflow.com/a/1479341/3482730
Así que probablemente algo como:
class FeatureFlagConfiguration { async getFlags() { if (FeatureFlagConfiguration.instance === undefined) { // prob not needed const client = new Client(); this.flags = await client.getFlags(); this.moreInfo = await client.getMoreInfo(); FeatureFlagConfiguration.instance = this; // prob not needed Object.freeze(FeatureFlagConfiguration.instance); // prob not needed } // prob not needed } evaluateFlags() { ... } isFeatureFlagEnabled() { ... } } const featureFlagConfigurationInstance = new FeatureFlagConfiguration(); module.exports = featureFlagConfigurationInstance;