2017-02-16 4 views
0

ノックを使用してReduxアクションの作成者をテストしています。私がオフラインになると、Axiosを使用したHTTPリクエストが成功しなかったという意味の失敗の約束が得られます。私がオンラインになると、それは動作します。ノックはインターネット接続がある場合にのみ機能しますか?

ノックはインターネットに接続されている場合にのみ機能しますか?

アクションCreatorは、アクションの作成者のための

export const fetchSomething = (id) => { 
    return dispatch => { 
    dispatch({ 
     type: FETCH_SOMETHING_LOADING 
    }); 

    return axios.get(`${SOMEWHERE}/something?id=${id}`) 
     .then(response => { 
     return dispatch({ 
      type: FETCH_SOMETHING_SUCCESS, 
      payload: response.data 
     }); 
     }) 
     .catch(error => { 
     return dispatch({ 
      type: FETCH_SOMETHING_FAILURE 
     }); 
     }); 
    }; 
}; 

冗談テスト私の知る限りでは(矢筈のv9.0.2)

test('should dispatch success action type if data is fetched successfully',() => { 
    // Need this in order for axios to work with nock 
    axios.defaults.adapter = require('axios/lib/adapters/http'); 

    nock(SOMEWHERE) 
    .get('/something?id=123') 
    .reply(200, someFakeObject); 

    thunk = fetchSomething(123); 

    return thunk(dispatch) 
    .then(() => { 
     expect(dispatch.mock.calls[1][0].type).toBe('FETCH_SOMETHING_SUCCESS'); 
    }); 
}); 

答えて

0

を見てみaxiosによって行われた要求をテストするためにノックを使用していくつかの問題があるようです。そのことについては、issue in nock's repositoryがあります。

私はその問題に@supnateさんのコメントが見つかりました。さらに、私はnock.cleanAll();beforeEach()の内部にの主な原因であるのコードを呼び出しました。

解決策はそれを削除することです。 nock.cleanAll()を使用しないでください!だから今はAxiosのリクエストをテストするのにうまくいきます:

import axios from 'axios'; 
import httpAdapter from 'axios/lib/adapters/http'; 

axios.defaults.host = SOMEWHERE; // e.g. http://www.somewhere.com 
axios.defaults.adapter = httpAdapter; 

describe('Your Test',() => { 
    test('should do something',() => { 
    nock(SOMEWHERE) 
     .get('/some/thing/3') 
     .reply(200, { some: 'thing', bla: 123 }); 

    // then test your stuff here 
); 
}); 
0

(axios 0.15.3を使用しています) nock npmモジュールは、ノードでのみ動作し、ブラウザでは動作しません。テストスイートでノックを使用していますか、開発中にAPIの埋め込みとして使用していますか?後者の場合、私はノックミドルウェアが動作するとは思わない。インターネットに接続していて、ノックが何かを傍受していないときは、実際のAPIからの応答を見ているかもしれません。

あなたはノード内とブラウザの両方で動作する同様のアダプタを試してみたい場合は、axios-mock-adapter

+0

私はアクシオを使って自分のアクションクリエータでHTTP呼び出しを行います。テストのために、私はJestを使ってnockを呼び出してインターセプタを設定します。インターセプタはまったく使用されていないようです。オフライン(またはnock.disableNetConnect()を呼び出す)に行くと、私のaxios.getは失敗し、キャッチブロックに移動します。 – nbkhope

+0

テストケースがあるように質問を編集できますか? –

関連する問題