¿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
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:
MockedSocket no lo hace, es posible que seas responsable de construir un messageParent falso en los mensajes que tu prueba envía al trabajador.