2017-08-23 3 views
3

私のサンクをテストするのに問題があります。私のAPI呼び出しの多くがFormDataを使用しているので、テストでこれをどうやって模倣するか分からないようです。私はJestを使用しています。ネイティブ - 模擬テストFormData in unit tests

マイセットアップファイルは次のようになります。しかし

import 'isomorphic-fetch'; 

// Mocking the global.fetch included in React Native 
global.fetch = jest.fn(); 

// Helper to mock a success response (only once) 
fetch.mockResponseSuccess = body => { 
    fetch.mockImplementationOnce(() => 
    Promise.resolve({ json:() => Promise.resolve(JSON.parse(body)) }) 
); 
}; 

// Helper to mock a failure response (only once) 
fetch.mockResponseFailure = error => { 
    fetch.mockImplementationOnce(() => Promise.reject(error)); 
}; 

、私がいるFormData必要とするすべてのテストに次のエラーを取得する:私はreact-native-mockからいるFormDataファイルをインポートしようとした

ReferenceError: FormData is not defined 

を、 src/Libraries/Network/FormDataの下にありましたが、動作しませんでした。

だから私は誰もこれをやって運があったのだろうか?

一般に、私はfetchリクエストをReact Nativeでモックする最善の方法を考え出すのに苦労しているので、ここのアドバイスはいいと思います。私はjest-fetch-mock lib(FormDataについての問題を開いた)を試してみたところ、nock(運がない)で設定しようとしましたが、このプレーンなJestの実装ではまだ何も感じません。

+0

たびsetupJest.jsを呼び出すようにそれに

global.FormData = require('FormData') 

をコードを次がありますか? – Marklar

+0

まだ、残念ながら – jhm

答えて

2

これは、古い質問ですが、私はGoogleの最初のページでそれを見つけたことから、ここで私が何をやったか行く:

私が追加私のテストの冒頭で:

function FormDataMock() { 
    this.append = jest.fn(); 
} 
global.FormData = FormDataMock 

これは、行うすべての場所が

const formData = new FormData() 

私のモックを使用することを確認します。

もちろん、私が必要としていたのは私の場合だけだったので、私は「追加」メソッドを嘲笑しました。すべてが期待通りに働いていた場合、私はテストだった機能は、作成いるFormDataオブジェクトを返し、私はこれをテストしました:

const resultFormData = theFunction() 
expect(resultFormData.append.mock.calls.sort(sortFunc)).toEqual(expected) 
+0

このソリューションは、 'FormData.append'を使用する外部ライブラリをインストールして使用できますか?私は私の単純なテストで 'beforeEach'に' FormDataMock'コードを追加しようとしましたが、私のプロジェクト内で使用されているライブラリから 'FormDataが定義されていません。ありがとう。 – Marklar

+0

私はこれをローカルコードでのみテストし、外部ライブラリではテストしませんでした。テストしようとしているライブラリは何ですか? – brunovianarezende

+0

ライブラリは[react-native-aws3](https:// github。com/benjreinhart/react-native-aws3)、私は実際に自分でテストしたくありません。私の非常に基本的なテストが失敗する原因になっています。なぜなら、それは私のReact Nativeプロジェクトに依存しているからでしょうか? – Marklar

1

は、テストファイルの先頭に次のコードを追加

global.FormData = require('FormData') 

または

は、次にを作成

{ 
    "jest": { 
     "preset": "react-native", 
     "transformIgnorePatterns": [ 
      "<rootDir>/node_modules/(?!react-native|tcomb-form-native|ReactUtils|react-native-button)" 
     ], 
     "automock": false, 
     "setupFiles": [ 
      "./setupJest.js" 
     ] 
     } 
} 

あなたのpackage.jsonにこのような何かをしていますpackage.jsonと同じフォルダ上のファイルとjestはあなたのために働いて解決策を見つけましたjest実行テスト

関連する問題