2017-09-22 1 views
0

J'essaie de tester si une fonction (passée en tant que props au composant React) est appelée avec les arguments attendus en créant un simulacre de celle-ci en utilisant Jest.Mocking une fonction appelée à l'intérieur d'un bloc alors dans un composant React

est inférieure à la fonction que je suis en train de tester:

handlerFunction() { 

let response = []; 
this.props.files.forEach((file) => { 

    let responseObject= this.getResponse(file); 
    responseObject.then((result) => { 

    response.push({ 

     fileName: file.name, 
     records: result, 

    }); 

    this.props.sendResponseData(response); 

    }); 

}); 

} 

getResponse(file) { 

return new Promise((resolve, reject) => { 

    axios.post(URL, file).then((response) => { 

    resolve(response.data); 

    }).catch((error) => { 

    reject(console.error(error)); 

    }); 

}); 

} 

handlerFunction() appelle getResponse() qui fait un appel AJAX et renvoie les données de réponse dans une promesse. handlerFunction() prend les données de réponse renvoyées par getResponse() et pousse les données de réponse et le nom du fichier correspondant dans la réponse [], puis appelle this.props.sendResponseData() avec. Je me suis moqué de getResponse() et l'ai fait renvoyer des données de réponse factices et tester si this.props.sendResponseData() est appelé avec le dummyResponse que j'ai créé dans la classe de test.

Voici le code que je l'ai écrit pour tester la fonction ci-dessus dans un composant React:

it('handlerFunction',() => { 
files= [dummyFile]; 
sendResponseData = jest.fn(); 

let wrapper = shallow(<RenderComponent 
         files={files} 
         sendResponseData={sendResponseData} 
         />); 

let dummyAJAXResponse = {}; 
let dummyResponse = [{ fileName: 'file', records: dummyAJAXResponse }]; 

const getResponseMock= jest.fn(() => { 

return new Promise((resolve) => { 

    resolve(dummyAJAXResponse); 

}); 

}); 
wrapper.instance().getResponse= getResponseMock ; 
wrapper.update(); 
wrapper.instance().handlerFunction(); 
expect(sendResponseData).toBeCalledWith(dummyResponse); 
}) 

Lorsque je tente de lancer ce test, il échoue et dit comme suit:

expect(jest.fn()).toBeCalledWith(expected) 

Expected mock function to have been called with: 
    [[{"fileName": "file", "records": {}}]] 
But it was not called. 

Toute aide serait grandement appréciée. Merci!

Répondre

0

Essayez d'ajouter retrun avant axios. Comme ça:

return new Promise((resolve, reject) => { 

    return axios.post(URL, file).then((response) => { 

ou

return new Promise((resolve, reject) => (

    axios.post(URL, file).then((response) => {