2016-10-31 2 views
1

Ich verwende axios für die API-Anrufe in meinem reactredux App. Ich habe diese Abfangjäger die Antwort für alle api Anrufe abfangen und umleiten Benutzer anmelden, wenn der Statuscode 401.Unit Testing Interceptor (Axios)

axios.interceptors.response.use((response) => { 
    if (response.status === 401) { 
    browserHistory.push('/login'); 
    } 
    return response; 
}); 

ist Ich bin Einheit testet diese und behauptet auf browserHistory Spion aufgerufen, aber ich bin nicht sicher, warum mein Test immer versagt. Ich bin nach vielen Versuchen festgefahren und kann das Problem nicht lösen. Ich verwende moxios für Spottantwort.

-Test

let sandbox; 

    beforeEach(() => { 
    moxios.install(); 
    sandbox = sinon.sandbox.create(); 
    }); 

    afterEach(() => { 
    moxios.uninstall(); 
    sandbox.restore(); 
    }); 

    describe('interceptors',() => { 
    it('should redirect to login if response status code is 401', (done) => { 
     moxios.withMock(() => { 
     sandbox.spy(browserHistory, 'push'); 

     axios.get('/test'); 

     moxios.wait(() => { 
      const request = moxios.requests.mostRecent(); 
      request.respondWith({ 
      status: 401, 
      response: {} 
      }).then(() => { 
      expect(browserHistory.push).to.have.been.called; // Fails 
      done(); 
      }).catch(done); 
     }); 
     }); 
    }); 
}); 

Jede Art von Ressourcen oder Führungs würde wirklich geschätzt. Ich bin mir ziemlich sicher, dass mir hier etwas fehlt.

+0

Ich denke, Sie müssen 'axios.get ('/ test')' nach der 'moxios.wait' Definition aufrufen. – anoop

+0

Hey @anoop. Ich denke, ich habe das auch versucht, aber kein Glück. Irgendwelche anderen Vorschläge? – Umair

+0

aktualisiert als Antwort, ich denke, die Antwort muss mit einem Versprechen ausspionieren. – anoop

Antwort

0

Gemäß der Dokumentation benötigen Sie das Versprechen auszuspionieren,

Derzeit ist es als unten,

axios.get('/test');

Aber Sie müssen es auszuspionieren, wie unten,

let onFulfilled = sinon.spy() axios.get('/test').then(onFulfilled)

+0

Ja, ich ging das durch. Aber ich folge nicht wirklich. Willst du damit sagen, dass ich die "browserHistory" -Funktion, die aufgerufen wird, nicht ausspionieren muss? Oder was? – Umair

+0

Jetzt aktualisiert, können Sie die Unterschiede finden? – anoop

+0

Ja, ich habe das das erste Mal. Ich habe nur nach meiner anderen Behauptung gefragt. Selbst wenn ich das addiere, wird es meiner Meinung nach keinen Unterschied machen, da meine Behauptung ist, im Grunde zu sehen, ob die Funktion im Interceptor aufgerufen wird oder zumindest der Interceptor aufgerufen wird, aber ich bin nicht sicher, wie die Addition von onFulfilled das auflösen wird? – Umair