2017-08-17 76 views
1

呼叫我創建了一個簡單的例子來測試我的行動,但我store.dispatch沒有返回一個承諾。有人能告訴我什麼是錯的嗎?測試異步與玩笑,終極版,模擬店和Moxios

Action.js代碼:

export const handleSubmit = inputData => 
(dispatch) => { 
axios.post(`${API_URL}/process-input/`, { input: inputData }) 
    .then((resp) => { 
    dispatch({ 
     type: 'UPDATE_OUTPUT', 
     payload: resp.data, 
    }); 
    }) 
    .catch((e) => { 
    dispatch({ 
     type: 'UPDATE_OUTPUT', 
     payload: e.message, 
    }); 
    }); 

};

而且我的測試:

import configureMockStore from 'redux-mock-store'; 
import thunk from 'redux-thunk'; 
import moxios from 'moxios'; 
import * as actions from './../../../../src/modules/inputData/action'; 
import { API_URL } from './../../../../src/constants'; 

const middlewares = [thunk]; 
const mockStore = configureMockStore(middlewares); 

describe('InputData actions',() => { 
test('Test input value update',() => { 
moxios.install(); 
moxios.stubRequest(`${API_URL}/process-input/`, { status: 200, response: 'A nice test result' }); 
const store = mockStore(); 

return store.dispatch(actions.handleSubmit('anyData')) 
    .then(() => { 
    expect(store.getActions()).toEqual([ 
     { type: 'UPDATE_OUTPUTT', payload: 'A nice test result' }, 
    ]); 
    }); 

}); });

所返回的錯誤:無法讀取屬性「然後」未定義

+0

面臨着同樣的問題,在這個任何更新? –

回答

2

你的終極版動作沒有返回一個承諾。你應該返回axios.post函數。

export const handleSubmit = inputData => 
(dispatch) => { 
return axios.post(`${API_URL}/process-input/`, { input: inputData }) 
    .then((resp) => { 
    dispatch({ 
     type: 'UPDATE_OUTPUT', 
     payload: resp.data, 
    }); 
    }) 
    .catch((e) => { 
    dispatch({ 
     type: 'UPDATE_OUTPUT', 
     payload: e.message, 
    }); 
    }); 
};