2016-03-01 18 views
10

Xin chào trong tài liệu Redux để thử nghiệm họ có có ví dụ này để kiểm tra các cuộc gọi api:Testing Axios gọi với Sinon, với Redux và Karma

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

Tôi đang sử dụng thử nghiệm nghiệp môi trường, và tôi nghĩ rằng tôi có thể không sử dụng nock để kiểm tra điều này. Vì vậy, tôi đã nhìn vào thử nghiệm này bằng cách sử dụng Sinon thay thế. Rắc rối là tôi không hiểu làm thế nào tôi sẽ thử nghiệm bằng cách sử dụng này như tôi không đi qua một cuộc gọi lại vào cuộc gọi chức năng api của tôi. Tôi đang sử dụng các trục để gọi API bên ngoài của mình.

+0

bất kỳ cập nhật nào về điều này? Bạn đã quản lý để giải quyết nó? – anoop

Trả lời

1

Tôi không phải là chuyên gia về hành động không đồng bộ vì trong ứng dụng tôi kiểm tra tất cả những điều này một cách riêng biệt (người tạo hành động, api gọi với nock chế nhạo dịch vụ, hành vi không đồng bộ nhờ saga, tuy nhiên trong mã tài liệu redux trông như thế này

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

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

Vì vậy, các công văn trả hành động async của bạn, và bạn phải vượt qua bài kiểm tra trong hàm đó sẽ được thực hiện khi hành động async của bạn giải quyết. Nock'ing một thiết bị đầu cuối nên chỉ làm việc tốt.

5

Đối với điều này bạn nên sử dụng axios-mock-adapter

Ví dụ:

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) 
    ); 
    }); 
    }); 
Các vấn đề liên quan