2016-03-01 8 views
10

Привет в документации Redux для тестирования у них есть этот пример, чтобы проверить API вызовы:Тестирование Вардар звонки с Синоне, с 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()) 
    }) 
}) 

Я использую тест карма окружающей среде, и я думаю, что могу Не используйте нок, чтобы проверить это. Поэтому я изучал это, используя Sinon. Проблема в том, что я не понимаю, как я буду тестировать, используя это, поскольку я не передаю обратный вызов в свой вызов функции api. Я использую axios для вызова моего внешнего API.

+0

любое обновление по этому поводу? Удалось ли вам решить это? – anoop

ответ

1

Я не эксперт по асинхронным действиям, так как в своем приложении я тестирую все эти вещи отдельно (создатель действий, вызовы api с нок-мэрингом службы, асинхронное поведение благодаря saga, однако в коде документов redux это выглядит так:

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

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

Так диспетчерские возвращает ваши действия асинхронных, и вы должны пройти тест на функции, которая будет выполняться, когда ваше действие асинхронного решает. 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) 
    ); 
    }); 
    }); 

 Смежные вопросы

  • Нет связанных вопросов^_^