2016-08-08 49 views
5

Ich versuche, einen Apiwrapper in einer reaktionsnativen basierten App mit Jest (Integrationstest) zu testen. Wenn ich es im iOS Simulator laufen läuft alles aber fein, es wird nicht richtig meinen Scherz Tests laufen - ich immer erhalten:XMLHttpRequest ist nicht definiert, wenn reaktive native App mit Jest getestet wird

ReferenceError: XMLHttpRequest is not defined 

wenn ich versuche, Tests mit meinem api-Wrapper zu laufen, zB .:

it('Login successful with correct data',() => { 
    let api = Api.getInstance(); 
    return api.login("test", "testpass") 
     .then(result => expect(result).toEqual('login_successful')); 
}); 

die api-klasse, die ich versuche hier zu testen, verwendet die fetch api (nicht vanilla xhr). Ich nehme an, dass es etwas mit dem Scherz zu tun hat, der versucht, etwas zu verspotten, aber noch keinen Weg gefunden hat, es zum Laufen zu bringen.

Vielen Dank im Voraus.

+0

Mögliches Duplikat [XHR Prüfung in Jest] (http://stackoverflow.com/questions/28584773/xhr-testing-in-jest) –

+0

ich verwende Abruf nicht so XHR Die angebotene Lösung löst das Problem nicht wirklich. Obwohl ich eigentlich Integrationstests durchführen möchte. Korrektes Mocking der Fetch-API wäre auch akzeptabel ... aber ich habe keine Möglichkeit gefunden, korrekt anzugeben, was der Mock für welche Eingaben zum Fetch zurückgeben soll ... – dburgmann

Antwort

2

Ich hatte ein ähnliches Problem mit lokka mit XMLHttpRequest. Ich habe eine Kopie für lokka gemacht, von der meine API-Wrapper-Klasse abhängt. Sie könnten versuchen, Ihren api-Wrapper zu verspotten.

Das ist, was mein lokka Mock für jetzt aussieht. Ich füge mehr hinzu, wenn ich mit der Fehlerbehandlung beginne.

export default class { 
    query() { 
    return new Promise(resolve => { 
     resolve(200); 
    }); 
    } 
} 

Sie könnten in der Lage sein, Ihre api Wrapper ähnlich mit etwas zu verspotten:

export default class Api {  
    getInstance() { 
    \\ However you implemented getInstance  
    } 

    login(user, password) { 
    return new Promise(resolve => { 
     resolve('login_successful'); 
    }); 
    } 
} 
0

In meinem Fall, Ich teste den Code nicht suchen sondern nur irgendwo in meinem Code-Pfad zu importieren, so Ich entschied mich, es auf globaler Ebene in einer setup.js Datei (die mit --require bei Testlauf geladen wurde) nur zu verspotten. Die folgenden Werke für mich:

// needed in react-instantsearch 
class XMLHttpRequest {} 
global.XMLHttpRequest = XMLHttpRequest;