Actualmente estamos actualizando de Node v12 a Node v16.
Después de la actualización de la versión del nodo, la siguiente prueba falla con este error.
[Rechazo de promesa no controlada: este error se originó al lanzar dentro de una función asíncrona sin un bloque catch, o al rechazar una promesa que no se manejó con .catch(). La promesa rechazada con el motivo "Error".] { código: 'ERR_UNHANDLED_REJECTION'
Pero, ¿por qué una versión de nodo causa esto?
Este error se detiene si .catch() del caso de prueba.
Pero sigue siendo un resultado incorrecto porque la instantánea ya no coincide si hago eso.
Esta es la prueba.
it('should test', async () => { const thePromise = Promise.resolve({ json: () => { Promise.reject(new Error()); }, }); // validateData is fetch call. validateData.mockReturnValueOnce(thePromise); const rendered = renderModule({ state: { code: 'mockRefCode' } }); rendered.find('#btn').simulate('click'); await ((thePromise)).then().catch(); // If i remove this catch, above error gone but wrong snapshot (null snapshot). expect(rendered.find('#error')).toMatchSnapshot(); });Este es el código que se está probando.
export const validateCode = async (env, code) => fetch(`www.getapiresponse.example`); export const SomeReactComponent(props) { … const [validatingCode, setValidatingCode] = useState(false); const [validationError, setValidationError] = useState(''); const validateData = () => { if (!code) { setValidationError(langPack.emptyField); return; } setValidatingCode(true); validateCode(environment, code.trim()) .then((response) => response.json()) .then((body) => { if (body.response_status_code !== '200') { // some logging } else { setValidationError(''); } }) .catch(() => setValidationError(langPack.serviceError)) .finally(() => setValidatingCode(false)); }; … } Si .catch() , la instantánea termina como nula.
La instantánea correcta debería ser algo como lo siguiente:
- <div - className="error" - id="error" - > - service - </div>Prueba esto :
try { await thePromise } catch (e) { e.toBeInstanceOf(Error) }