Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

166
Views
Jest messageParent solo se puede usar dentro de un trabajador

¿Hay alguna manera de obtener un mensaje de error adecuado?

Cuando lo hago

$npm test

y rompo mi código intencionalmente (tos, tos, elimino una línea de código), recibo este mensaje

 src/redux/drivers/driver.saga.spec.js Test suite failed to run "messageParent" can only be used inside a worker at messageParent (node_modules/jest-worker/build/workers/messageParent.js:46:11)

Creo que este es un mensaje de error sin sentido y sería bueno tener algo significativo (=.

aquí está mi prueba

 describe("DriverSocketFlow failed REASON:\n", () => { let socket; beforeEach(() => { socket = new MockedSocket(); io.mockReturnValue(socket); }); afterEach(() => { jest.restoreAllMocks(); }); const mockGeneratorPayload = { payload: { name: "Royal Palms" } }; const generator = DriverSocketFlow(mockGeneratorPayload); test("Checking if DriverSocketFlow was called with it's methods and disconnected gracefully", () => { expect(generator.next(socket).value).toEqual( call(connect, mockGeneratorPayload.payload.name) ); expect(generator.next(socket).value).toEqual( call(socketbug, mockGeneratorPayload.payload.name) ); //disconnect gracefully expect(generator.next(socket).value).toEqual( fork(Read_Emit_Or_Write_Emit, socket) ); expect(generator.next().value).toEqual( take(DriversActionTypes.DRIVERS_SOCKET_OFF) ); expect(generator.next(socket).value).toEqual(call(disconnect, socket)); expect(generator.next(socket).value).toEqual(call(disconnect, socket)); expect(generator.next().value).toEqual(cancel()); }); });

debería decir

DriverSocketFlow falló RAZÓN:

Verificando si la función del generador DriverSocketFlow fue llamada y desconectada correctamente

¡Gracias! ¡Para mirar!

.... ¡Así que creo que lo descubrí! aquí está mi nueva prueba

 test("1. Connected to the socket successfully", () => { expect(generator.next(socket).value).toEqual( call(Connect_To_Socket, mockGeneratorPayload.payload.name) ); expect(generator.next(socket).value).toEqual( call(socketbug, mockGeneratorPayload.payload.name) ); }); test("2. Read_Emit_Or_Write_Emit generator function operations for socket.on and emit", () => { expect(generator.next(socket).value.payload.fn).toEqual( fork(Read_Emit_Or_Write_Emit, socket).payload.fn ); });

pero creo que es un error dentro de la prueba npm No sé por qué lo hace, pero si detiene el reloj en la prueba npm dentro de la etiqueta del script package.json y reinicia la prueba... Debería funcionar...

 "scripts": { "test": "react-scripts test --watchAll=false", },

y también....! no sé si este paso ayudó, pero agregué jest.config.js dentro del directorio raíz y lo eliminé, y de repente funcionó... " <- tos tos probablemente no haga nada, solo sigue reiniciándolo ¯ _(ツ)_/¯.... funcionó para mí"

Aquí está el código completo

controlador.saga.spec.js

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Sospecho que te estás precipitando demasiado al descartar este error como irrelevante.

"messageParent" solo se puede usar dentro de un trabajador

Ese mensaje de error sugiere con bastante fuerza que su prueba está intentando ejecutar código de trabajo en un contexto que no es de trabajo.

La fuente de broma confirma que este error se produce cuando el subproceso donde se ejecuta este código no es un trabajador.


(Divulgación completa: nunca antes había escrito un trabajador web, por lo que nunca probé uno).

Me parece que está probando su código de trabajo cargándolo en algún tipo de no trabajador. Su muestra me hace pensar que DriverSocketFlow habla con io para obtener un socket. Supongo que este socket es el socket sobre el cual se pasarán los mensajes de los trabajadores. Presumiblemente, su código de trabajador real usa messageParent para responder a los mensajes entrantes.

Parece que Jest proporciona algo de tecnología para ejecutar trabajadores web. Supongo que esta tecnología en realidad ejecuta el código para probarlo dentro de un trabajador web. También supongo que está tratando de hacerlo de otra manera: en lugar de generar realmente un trabajador, está usando simulacros de Jest regulares para crear versiones falsas del contexto del trabajador que cree que son relevantes para su prueba. Una de las razones por las que supongo que es porque así es como asumo que haría esto.

Si todo esto es correcto, entonces Jest ofrece dos formas de probar el código de trabajo, y está tratando de mezclar las dos técnicas, lo que está fallando.

Tu también puedes:

  • (A) use la tecnología de trabajador de Jest para cargar su código de trabajador de producción en un trabajador web real (que supongo que se ejecuta en un hilo separado; presumiblemente, uno de los principales beneficios de usar la tecnología de trabajador de Jest es que Jest luego administra el ciclo de vida de ese hilo para ti). Eso haría que este error desapareciera, pero también tendría que dejar de burlarse del zócalo. Si mi especulación es precisa, esperaría que la tecnología de trabajo de Jest le proporcione un socket real del subproceso de trabajo que está administrando.
  • (B) dejar de usar la tecnología de trabajo de Jest y ejecutar el código de trabajo en el hilo de prueba principal, que luego se basaría en un conjunto de simulacros que crearía y proporcionaría, incluido este enchufe falso que el "trabajador" usará para comunicarse con el arnés de prueba. Si MockedSocket no lo hace, es posible que seas responsable de construir un messageParent falso en los mensajes que tu prueba envía al trabajador.
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!