2017-01-17 20 views
0

をerroringされ、私はAJAXリクエストをテストしていますがXMLHttpRequestを使用して作られた:ノックは私の要求を傍受されていますが、私のAJAX要求が

export default function requestToTest() { 
    const xhr = new XMLHttpRequest(); 
    xhr.open('GET', 'https://example.com/service'); 

    xhr.onload =() => { 
    console.log('onload'); 
    // etc. 
    }; 

    xhr.onerror =() => { 
    console.log('onerror'); 
    // etc. 
    }; 

    xhr.send(); 
} 

だから私はノック(とモカ)を使用してテストを設定しました

describe('requestToTest()',() => { 
    it('should handle a successful request',() => { 
    nock('https://example.com') 
     .log(console.log) 
     .get('/service') 
     .reply(200, { some: 'json' }); 

    requestToTest(); 

    expect(/* things I want to check */).to.be.true; 
    }); 
}); 

このテストを実行すると、xhr.onerror()が発生し、xhr.onload()ではありません。しかし、log()への呼び出しによるNockの出力を観察すると、NockがAJAX要求を傍受しており、傍受した要求がNockの予想されるURLと一致していることがわかります。

xhr.onerrorが私のテストでxhr.onloadの代わりに呼び出されているのはなぜですか?

+0

私はこれを完全に理解したことはありませんでしたが、XMLHttpRequestはNode.jsではなくブラウザ環境でのみ定義されているためです – Kevin

答えて

1

回避策として、私はisomorphic-fetchライブラリを使用しました。このライブラリは、AJAXリクエストを作成するためのXMLHttpRequestの代替品であり、ブラウザ環境およびNode.js /テスト環境で多かれ少なかれ同様に動作するように設計されています。

一般に、ブラウザでのAJAXリクエストの差を平滑化し、テスト環境からリクエストを出すように設計されたライブラリを使用することは、この問題の解決策のようです。

関連する問題