Tengo una clase de API que estoy tratando de usar en una aplicación React.
// API file class API { ... } export default API; // Other file import API from "utils/API"; const api = new API();Y me sale el error:
TypeError: _API.default is not a constructorPero... ¿parece que mi valor predeterminado está configurado?
Mi configuración de Jest es así:
"jest": { "setupFiles": [ "./jestSetupFile.js" ], "testEnvironment": "jsdom", "preset": "jest-expo", "transformIgnorePatterns": [ "node_modules/(?!((jest-)?react-native|@react-native(-community)?)|expo(nent)?|@expo(nent)?/.*|@expo-google-fonts/.*|react-navigation|@react-navigation/.*|@unimodules/.*|unimodules|sentry-expo|native-base|react-native-svg|react-router-native/.*|@invertase/react-native-apple-authentication/.*)" ] },Mi fuerte conjetura es que esto se debe a una configuración de mi babel, webpack o package.json.
¿Qué podría estar causando esto?
Tenga en cuenta que quiero ser claro, esto no sucede en absoluto en mi aplicación principal, solo en las pruebas de Jest
Si lo cambio a una exportación/importación con nombre, obtengo esto:
TypeError: _API.API is not a constructorComportamiento extremadamente confuso.
Como lo mencionaron otros, sería útil ver un ejemplo mínimo reproducible.
Sin embargo, hay otra causa posible. ¿Se está burlando de la clase API en su archivo de prueba? Este problema a veces puede ocurrir si una clase se burla por error como un "objeto" en lugar de una función. No se puede crear una instancia de un objeto con un operador "nuevo".
Por ejemplo, supongamos que tenemos un archivo de clase utils/API así:
class API { someMethod() { // Does stuff } } export default API; La siguiente es una forma "incorrecta" de simular esta clase y arrojará un TypeError... is not a constructor si se crea una instancia de la clase después de que se haya creado el simulacro.
import API from 'utils/API'; jest.mock('utils/API', () => { // Returns an object return { someMethod: () => {} }; }) // This will throw the error const api = new API(); Lo siguiente se burlará de la clase como una función y aceptará el new operador y no arrojará el error.
import API from 'utils/API'; jest.mock('utils/API', () => { // Returns a function return jest.fn().mockImplementation(() => ({ someMethod: () => {} })); }) // This will not throw an error anymore const api = new API();Tendrás que exportarlo así:
export default class APIPodrías probar con:
utilidades/API.js
export default class API { ... }prueba.js
import API from "utils/API"; const api = new API();