Esta prueba es extremadamente simple y debería ser sencilla… pero…
Una configuración de plugin está cambiando de la que he configurado.
Cuando el javascript se ejecuta como resultado de la carga del Compositor, ¡el valor de configuración establecido anteriormente en el bloque de aceptación ya no es el mismo!
Debería ser “user” como se establece en el código de prueba, pero si se registra en la consola, esto es lo que veo, y por qué la prueba falla:
Lo probé localmente. Parece que hay varios factores en juego:
El objeto siteSettings al que te refieres se obtiene mediante el inicializador y luego se utiliza en una llamada a modifyClass:
Los inicializadores se vuelven a ejecutar para cada prueba. El problema es que no tenemos forma de “restablecer” ninguna llamada a modifyClass que se haya realizado en pruebas anteriores. Nuestra solución es el parámetro pluginId, lo que significa que solo se utiliza la primera llamada a modifyClassen toda la suite de pruebas. Las llamadas a modifyClass de inicializadores en pruebas futuras se ignoran.
Normalmente, eso está bien, ya que el código dentro de una invocación de modifyClass no tiende a cambiar en cada ejecución de prueba. Sin embargo, en este caso, estás haciendo referencia a la referencia siteSettings del ámbito del inicializador.
En resumen: en las pruebas, esta implementación significa que modifyClass se quedará con la configuración del sitio de la prueba que fue la primera en ejecutarse.
La solución es usar una referencia siteSettings “en tiempo de ejecución” en lugar de “en tiempo de inicializador”. Podemos usar la del propio model:composer. Esta diferencia hace que las pruebas pasen para mí:
Hay otro problema aquí que sospecho que se debe a la misma razón:
currentUser también está definido en el inicializador.
Si la prueba incorrecta se ejecuta en segundo lugar, esta se evalúa y ya no se define, por lo que las pruebas cuando se ejecutan juntas pueden fallar “la mitad” del tiempo.
Creo que el modelo Composer tiene user, así que cambiaré a ese…