2016-03-01 8 views
10

हैलो redux दस्तावेज में साथ वे API कॉल का परीक्षण करने के इस उदाहरण है:परीक्षण Axios के परीक्षण के लिए, सिनोन साथ कॉल redux और कर्मा

import configureMockStore from 'redux-mock-store' 
import thunk from 'redux-thunk' 
import * as actions from '../../actions/counter' 
import * as types from '../../constants/ActionTypes' 
import nock from 'nock' 

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

describe('async actions',() => { 
    afterEach(() => { 
    nock.cleanAll() 
    }) 

    it('creates FETCH_TODOS_SUCCESS when fetching todos has been done', (done) => { 
    nock('http://example.com/') 
     .get('/todos') 
     .reply(200, { body: { todos: ['do something'] }}) 

    const expectedActions = [ 
     { type: types.FETCH_TODOS_REQUEST }, 
     { type: types.FETCH_TODOS_SUCCESS, body: { todos: ['do something'] } } 
    ] 
    const store = mockStore({ todos: [] }, expectedActions, done) 
    store.dispatch(actions.fetchTodos()) 
    }) 
}) 

मैं कर्म परीक्षण वातावरण का उपयोग कर रहा है, और मुझे लगता है कि मैं यह कर सकते हैं इसका परीक्षण करने के लिए नॉक का उपयोग न करें। तो मैं इसके बजाय साइनऑन का उपयोग करके इसका परीक्षण कर रहा था। समस्या यह है कि मैं समझ नहीं पा रहा हूं कि मैं इसका उपयोग कैसे करूंगा क्योंकि मैं अपने एपीआई फ़ंक्शन कॉल में कॉलबैक पास नहीं कर रहा हूं। मैं अपने बाहरी एपीआई को कॉल करने के लिए अक्षरों का उपयोग कर रहा हूं।

+0

इस पर किसी भी अद्यतन? क्या आप इसे हल करने के लिए प्रबंधन किया था? – anoop

उत्तर

1

मैं async कार्यों पर एक विशेषज्ञ के बाद से मेरे एप्लिकेशन में मैं इन सब बातों को अलग से परीक्षण नहीं कर रहा हूँ (कार्रवाई निर्माता, एपीआई काटने का निशान एक सेवा, saga को अतुल्यकालिक व्यवहार धन्यवाद मजाक के साथ कहता है, तथापि redux डॉक्स में कोड इस तरह दिखता है

const store = mockStore({ todos: [] }) 

    return store.dispatch(actions.fetchTodos()) 
     .then(() => { // return of async actions 
     expect(store.getActions()).toEqual(expectedActions) 
     }) 

तो प्रेषण अपने async कार्रवाई देता है, और आप समारोह है कि जब आपके async कार्रवाई हल करता है। कि समाप्ति बिंदु Nock'ing ठीक काम करना चाहिए निष्पादित किया जाएगा में परीक्षा उत्तीर्ण की है।

5

इसके लिए आपको axios-mock-adapter

का उपयोग करना चाहिए

उदाहरण:

import MockAdapter from 'axios-mock-adapter'; 
import axios from 'axios'; 
import thunk from 'redux-thunk'; 
import configureMockStore from 'redux-mock-store'; 
import * as actionTypes from './userConstants'; 
import * as actions from './userActions'; 


const mockAxios = new MockAdapter(axios); 
const mockStore = configureMockStore(middlewares); 

describe('fetchCurrentUser',() => { 
    afterEach(() => { 
    mockAxios.reset(); 
    }); 

    context('when request succeeds',() => { 
    it('dispatches FETCH_CURRENT_USER_SUCCESS',() => { 
     mockAxios.onGet('/api/v1/user/current').reply(200, {}); 

     const expectedActions = [ 
     { type: actionTypes.SET_IS_FETCHING_CURRENT_USER }, 
     { type: actionTypes.FETCH_CURRENT_USER_SUCCESS, user: {} } 
     ]; 

     const store = mockStore({ users: Map() }); 

     return store.dispatch(actions.fetchCurrentUser()).then(() => 
     expect(store.getActions()).to.eql(expectedActions) 
    ); 
    }); 
    }); 
संबंधित मुद्दे