2016-08-08 33 views
5

我正在嘗試使用jest(集成測試)測試基於react-native的應用程序中的apiwrapper。 當我在iPhone模擬器運行它,一切都正常運行但它不會正確運行我開玩笑的測試 - 我總是得到:當使用jest測試react-native應用程序時,未定義XMLHttpRequest

ReferenceError: XMLHttpRequest is not defined 

當我嘗試使用我的API的包裝,如:

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

我試圖在這裏測試的api類確實使用fetch API(不是vanilla xhr)。我認爲它與開玩笑試圖嘲諷某事有關,但還沒有找到一種方法讓它工作。

在此先感謝。

+0

[開玩笑XHR測試(http://stackoverflow.com/questions/28584773/xhr-testing-in-jest) –

+0

我使用的取指不XHR所以可能的複製所提供的解決方案並不能真正解決問題。 雖然我真的想做集成測試。正確地嘲弄抓取API也是可以接受的......但是我找不到正確指定模擬應該返回哪些輸入以獲取的方法...... – dburgmann

回答

2

我有一個lokka使用XMLHttpRequest類似的問題。我做了一個模擬lokka,這是我的api包裝類依賴。你可以試着嘲笑你的api包裝。我的lokka模擬現在看起來像。當我開始測試錯誤處理時,我會添加更多內容。

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

你也許可以用類似的東西來嘲笑你的API包裝:

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

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

就我而言,我不是測試搜索代碼,但只在我的代碼路徑的地方進口,所以我決定在setup.js文件(在測試運行時使用--require加載)在全球範圍內嘲笑它。對我來說,以下工作:

// needed in react-instantsearch 
class XMLHttpRequest {} 
global.XMLHttpRequest = XMLHttpRequest; 
相關問題