Issue #959💬 RespondidoAbierto el 16 de marzo de 2018por tommedemaReacciones 1

Fallo intermitente en la prueba en la rama 'dev' debido a la condición de la carrera

Respuesta rápidapor tommedema1

Hace tiempo que no veo esto. Cerraremos por ahora.

Lee la respuesta completa abajo ↓

Pregunta

Recomiendo añadir '--bail' después del comando 'mocha' en 'package.json''s 'test' para que sea más fácil de ver, por ejemplo:

"test": "cross-env NODE_PATH=./src mocha --bail --compiladores js:babel-core/register --requieren test/helper.js --timeout 10000 --test recursivo/main.js",

En la última rama 'dev', esto es fácil de reproducir simplemente ejecutando 'npm test' muchas veces:

Prueba TNM &• Prueba TNM &Prueba TNM & Prueba TNM & Prueba TNM &

Tarde o temprano obtendrás:

  1 fallo

1) Main SelectorManager ve las pruebas E2E "antes de cada gancho":
     ErrorTipo no capturado: this.get(...). getComponent no es una función
      en child.getCss (src/editor/modelo/Editor.js:308:43)
      a Object.store (src/css_composer/index.js:154:52)
      en src/editor/model/Editor.js:345:19
      en Array.forEach (<anonymous>)
      a child.store (src/editor/modelo/Editor.js:344:27)
      en child.updateChanges (src/editor/model/Editor.js:119:12)
      en triggerEvents (node_modules/backbone/backbone.js:371:57)
      en triggerApi (node_modules/backbone/backbone.js:356:19)
      en los eventosApi (node_modules/backbone/backbone.js:155:16)
      De niño. Events.trigger (node_modules/backbone/backbone.js:346:5)
      en child.set (node_modules/backbone/backbone.js:516:16)
      a Timeout._onTimeout (src/editor/modelo/Editor.js:187:14)

Esto parece desaparecer si '.slips' este examen en 'test/specs/selector_manager/e2e/ClassManager.js' en la línea 74:

it.skip('La clase importada en el componente es el mismo modelo del contenedor principal', function() {
          var model = components.add({ clases: ['test1'] });
          var clModel = model.get('classes').at(0);
          var clModel2 = gjs.editor
            .get('SelectorManager')
            .getAll()
            .at(0);
          expect(clModel).toIgual(clModel2);
        });

Por supuesto, eso no es una solución. Pero puede indicar cuál es el problema subyacente. Parece una condición de carrera de algún tipo.

También desaparece si comentas el 'editor/modelo/Editor.js' de los oyentes del evento:

Módulos de carga
    deps.forEach(name => this.loadModule(name));
    this.on('change:selectedComponent', this.componentSelected, this);
    this.on('change:changesCount', this.updateChanges, this);

¿Quizá los módulos aún no se han cargado completamente y ya hay cambios por procesar? Resultando en 'const wrp = this.get('DomComponents').getComponent();' en la línea 308 de 'Editor.js' para lanzar.

¿Deberíamos esperar a que todos los módulos se hayan cargado antes de adjuntar los oyentes de eventos?

Respuestas (3)

tommedema12 de abril de 2018

Hace tiempo que no veo esto. Cerraremos por ahora.

artf17 de marzo de 2018

¿Deberíamos esperar a que todos los módulos se hayan cargado antes de adjuntar los oyentes de eventos?

Mmmm, ese fragmento de código se ejecuta de forma síncrona, así que no creo que vaya a ayudar

Por cierto, nunca me he encontrado con este problema en mi entorno 🤔

tommedema17 de marzo de 2018

@artf aquí es fácilmente reproducible. Intenta ejecutarlo repetidamente como se ha sugerido antes.

Aquí tienes la prueba:

! sin título-3

Mi entorno:

OSX High Sierra 10.13.3 Node.js v9.2.1 Últimas violaciones de la rama de desarrollo cometer #e6593e7ad9a

Por alguna razón, 'this.get('DomComponents')' devuelve nulo cuando debería devolver el envoltorio en la línea 308 en 'editor/model/Editor.js'

Preguntas y respuestas relacionadas

Continúa investigando con debates sobre temas similares.

Plugins de pago que cumplen con este problema

Seleccionado por temas clave y relevancia de etiquetas para ayudarte a enviar más rápido.

Ver todos los plugins

Cargando recomendaciones de plugins de pago...

Opción gratuita

Consulta los plugins de código abierto de GrapesJS en GitHub O haz una búsqueda rápida en nuestro catálogo gratuito.

Explora plugins gratuitos →
Opción premium

Los plugins premium incluyen soporte, actualizaciones regulares y funciones listas para producción — ahorrando días de trabajo de integración.

Explora plugins premium →

Tutoriales relacionados

Guías detalladas sobre el mismo tema.

Todos los tutoriales →

Explorar categorías de plugins

Ve directamente a las páginas de categorías de plugins en el marketplace.