Traté de completar una evaluación de javascript para una entrevista de trabajo pero fallé
Mi plan era procesar el objeto de usuario dentro de la función findPotentialLikes, pero siempre se mostrará indefinido.
Está hecho utilizando el marco de prueba y las promesas de Mocha y Chai.
Básicamente, mi pregunta es: ¿cómo obtengo al usuario en la promesa findPotentialLikes?
class SocialNetworkQueries { constructor({ fetchCurrentUser }) { this.fetchCurrentUser = fetchCurrentUser; } findPotentialLikes({ minimalScore } = { }) { console.log(this.fetchCurentUser); // I tried here to get the user in order to process the findPotentialLikes function with no luck return Promise.resolve(); } } describe('SocialNetworkQueries', () => { describe("example from README", () => { it("should find potential likes", async () => { // given const user = { id: "mrouk3", likes: { books: ["Moby Dick", "Ulysses"], }, friends: [{ id: "YazL", likes: { books: ["Ulysses", "War and Peace"], } }], }; // when const potentialLikes = await new SocialNetworkQueries({ fetchCurrentUser: () => Promise.resolve(user), }).findPotentialLikes({ minimalScore: 0.3 }); // then expect(potentialLikes).toEqual({ books: [ "The Great Gatsby", "Don Quixote", "War and Peace", ], }); }); }); });Dado que la prueba proporciona el argumento fetchCurrentUser como una función que devuelve una promesa que se resuelve en un valor de usuario, deberá recuperar el valor resuelto de la promesa, ya sea a través de async/await:
class SocialNetworkQueries { constructor({ fetchCurrentUser }) { this.fetchCurrentUser = fetchCurrentUser; } async findPotentialLikes({ minimalScore } = { }) { const user = await this.fetchCurrentUser(); // ... return { books: [ "The Great Gatsby", "Don Quixote", "War and Peace", ] }; } } o lógica en una devolución de llamada .then() que se ejecutará después de que el usuario haya resuelto:
class SocialNetworkQueries { constructor({ fetchCurrentUser }) { this.fetchCurrentUser = fetchCurrentUser; } findPotentialLikes({ minimalScore } = { }) { return this.fetchCurrentUser().then( user => { // ... return { books: [ "The Great Gatsby", "Don Quixote", "War and Peace", ] }; } ); } } Cualquiera de los enfoques es funcionalmente equivalente y da como resultado findPotentialLikes() devuelva una Promesa que se resuelve con el valor afirmado de la prueba.