2017-09-22 8 views
0

Jestを使って模擬関数を作成して、期待される引数で関数が呼び出されるかどうかをテストしようとしています。Reactコンポーネントの中でthenブロックと呼ばれる関数を嘲笑

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()を呼び出してgetResponse()のAJAX呼び出しを行うと約束して応答データを返します。以下は

は、私がテストしようとしている機能です。 handlerFunction()は、getResponse()から返されたレスポンスデータを取得し、レスポンスデータと対応するファイルの名前をresponse []に​​プッシュし、this.props.sendResponseData()を呼び出します。私はgetResponse()を嘲笑して、ダミーのレスポンスデータを返し、this.props.sendResponseData()がテストクラスで作成したdummyResponseで呼び出されているかどうかをテストしました。ここで

は私が反応コンポーネントで上記の機能をテストするために書かれているコードは次のとおりです。私はこのテストを実行しようとすると

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); 
}) 

、それは次のように失敗し、こう述べています。

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

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

ご協力いただければ幸いです。ありがとう!

答えて

0

Axiosの前にretrunを追加してみてください。

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

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

または

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

    axios.post(URL, file).then((response) => { 
:そのような
関連する問題