2016-03-26 4 views
7

में एपीआई कॉल को अवरुद्ध नहीं कर रहा है, मैं एक रेडक्स ऐप में एपीआई कॉल का परीक्षण करने की कोशिश कर रहा हूं।नॉक रेडक्स परीक्षण

http://redux.js.org/docs/recipes/WritingTests.html

यह का सार है कि आप रिकॉर्ड और के खिलाफ बात पर जोर देना redux-नकली दुकान का उपयोग करें: कोड काफी पैटर्न Async कार्रवाई रचनाकारों redux किए गए दस्तावेज़ों की अनुभाग में बताया गया इस प्रकार है ट्रिगर किए गए किसी भी क्रिया।

यह वह जगह है पूरे परीक्षण, काटने का निशान का उपयोग कर API कॉल उपहास करने के लिए:

import React from 'React' 
import ReactDOM from 'react-dom' 
import expect from 'expect'; 
import expectJSX from 'expect-jsx'; 
import TestUtils from 'react-addons-test-utils' 
import configureMockStore from 'redux-mock-store' 
import thunk from 'redux-thunk' 
import nock from 'nock' 
expect.extend(expectJSX); 

import * as types from '../../constants/Actions' 

describe('Async Search Actions',() => { 
    const thunkMiddleware = [ thunk ]; 
    /* use redux-mock-store here */ 
    const mockStore = configureMockStore(thunkMiddleware); 


    describe('The fetchArtistData action creator should',() => { 

      afterEach(() => { 
       nock.cleanAll() 
      }) 

     it('Should fire off a ARTIST action when fetch is done', (done) => { 
      nock('http://ws.audioscrobbler.com') 
       .get('/2.0/') 
       .query({method: 'artist.search', artist: 'ho', api_key: 'abc123', format: 'json', limit: 5}) 
       .reply(200, 
         { 
         fake: true 
         } 
        ) 



      const expectedActions = [ 
       { type: types.ARTIST, artists: { 
         fake: true 
        } 
       } 
      ]; 

      let store = mockStore([], expectedActions, done); 
      store.dispatch(fetchArtist('ho')) 

     }); 

    }); 

}); 

लेकिन यह है कि वास्तविक LastFM एपीआई जब परीक्षण चलाया जाता है कहा जाता है ... वास्तविक डेटा बल्कि lastfm से दिया जाता है लगता है नकली नकली प्रतिक्रिया से।

यह क्रिया निर्माता ही है:

export function fetchArtist(search) { 
    return dispatch => { 
     return fetch(`http://ws.audioscrobbler.com/2.0/?method=artist.search&artist=${search}&api_key=abc123&format=json&limit=5`) 
      .then(handleErrors) 
      .then(response => response.json()) 
      .then(json => { dispatch(ArtistData(searchTerm, json)) }) 
      .catch(handleServerErrors) 
    } 
} 

दावे विफल रहता है क्योंकि लाइव LastFM प्रतिक्रिया प्रतिक्रिया मैं प्रति expectedActions वस्तु के रूप में की उम्मीद कर रहा हूँ के रूप में ही नहीं है ..

मैं

काटने का निशान लगाना, यकीन नहीं इस करता है, तो खड़ी कर रहा है वास्तविक एपीआई मज़ाक उड़ाया नहीं किया जा करने के लिए यूआरएल को पोर्ट 80 को जोड़ने जा रहा है: लॉग out.The एक चर को काटने का निशान बताए और यह लोग इन की कोशिश की दिया है इस से पता चलता

keyedInterceptors: Object{GET http://ws.audioscrobbler.com:80/2.0/? 
method=artist.search&artist=john&api_key=abc123&format=json&limit=5 

कोई विचार यहां क्या गलत है?

+1

तरह उपहास करने के लिए एक अलग लाइब्रेरी का उपयोग आप नोड या में यह चला रहे हैं ब्राउज़र? मुझे विश्वास नहीं है कि ब्राउज़र में नॉक काम करता है, केवल –

+0

आह ठीक है, यह समस्या है, तो मैं फ़ैंटॉमजे –

+0

पर परीक्षण चला रहा हूं ऐसा लगता है जैसे नॉक ब्राउज़र को पसंद नहीं करता है https://github.com/node-nock/काटने का निशान/मुद्दों/409। –

उत्तर

0

आपको मुख्य nock फ़ंक्शन पर केवल मूल URL पास करने की आवश्यकता है और URL पथ भाग .get() विधि में अलग करें।

nock('http://ws.audioscrobbler.com') 
    .get('/2.0/') 
    .query({ 
    method: 'artist.search', 
    artist: 'bob', 
    api_key: 'somekey123', 
    format: 'json', 
    limit: '5' 
    }) 
    .reply(200, {fake: true}) 

मैं उपरोक्त कोड के साथ नकली प्रतिक्रिया प्राप्त करने में सक्षम था।

+1

मुझे यह उल्लेख करना चाहिए था कि मैं ' डी ने कोशिश की - मुझे अभी भी इस कॉन्फ़िगरेशन –

+0

के साथ अंतिम एफएम से वास्तविक डेटा मिल रहा है ठीक है, आपको एक [MCVE] (http://stackoverflow.com/help/mcve) पोस्ट करना होगा क्योंकि यहां कुछ और डिस्कनेक्ट किया गया है लेकिन यह अनुमान लगाना मुश्किल है कि क्या हो सकता है। –

+0

ठीक कुछ और विवरण जोड़ा गया –

3

नॉक का उपयोग करने के लिए आपको अपने परीक्षण नोड (जेस्ट या मोचा का उपयोग करके) में चलाया जाना चाहिए, नॉक नोड http व्यवहार को ओवरराइड करता है और इसी कारण से यह केवल नोड में काम करता है और ब्राउज़र में नहीं (जैसे फैंटॉमजेएस)।

उदाहरण के लिए जिस लिंक को आपने इंगित किया है वह जेस्ट का उपयोग कर रहा है और पहली पंक्ति नोड पर्यावरण के बारे में स्पष्ट है। इसलिए, नॉक एक आकर्षण के रूप में काम करेगा। http://redux.js.org/docs/recipes/WritingTests.html

स्थापना हम परीक्षण इंजन के रूप में जेस्ट सलाह देते हैं। ध्यान दें कि यह नोड वातावरण में चलाता है, इसलिए आपके पास DOM तक पहुंच नहीं होगी।

के रूप में मैं देख रहा हूँ आप कर सकते हैं:

  • एक नोड वातावरण
  • में अपने परीक्षण चलाने के लिए या fetch-mock
संबंधित मुद्दे