2016-04-07 8 views
13

現在、React Nativeには、特定のファイル拡張子(*.ios.jsまたは*.android.js)を持つ実行中のプラットフォーム用のファイルが動的に必要です。ただし、テスト環境内でこのコードを実行するとき、我々はrequireエラーを取得するモジュールrequire('./module')は次のようになりますどの、ファイルツリーで見つけることができないので:React Nativeのプラットフォーム固有の拡張コードをテストします

どう
  • module.ios.js
  • module.android.js

テスト環境でこの問題を処理できますか?

答えて

0

それは一種の醜いだと、おそらくよりよい解決策はありますが、それはあなたがテストでそれはまだmodule.ios.jsまたはmodule.android.jsを使用するプラットフォーム環境で使用されるmodule.jsファイルを作成することができるようです。

0

テストでプラットフォーム固有の依存関係を解決するには、カスタムコンパイラを作成する必要があります。あなたはモカを使用している場合、これはおそらくあなたを助ける:

http://lidatang.com/setup-mocha-testing-react-native/

1

あなたはこのためにdefaultPlatform構成を使用することができ冗談17.0.0のよう - 冗談の一番下を参照してくださいネイティブtutorialを反応します。

それはそこに示したように、このような設定になります。

"haste": { 
    "defaultPlatform": "ios", 
    "platforms": ["android", "ios"], 
}, 

を当然のことながら、これはあなたのテストは唯一あなたがそれを設定することを選択した方法によっては、iOS版のコンポーネントのバージョン(または唯一のAndroidのロードを意味します)。

両方のバージョンをテストすることが重要である場合は、thisの問題に記載されているように、を直接操作し、require.requireActualを直接操作する必要があります。 moduleFileExtensionsにプラットフォーム固有の拡張機能を追加する

(以下ハックソリューションが最終的に発見された場合にも、this問題を追跡する場合があります。)

2

jest.14.1で私のために問題を修正しました。 github link

ここでは、package.jsonというサンプルの一部であり、scene.jest.js(x)を含むすべてのファイルが実行されます。

... 
"jest": { 
    "verbose": true, 
    "preset": "jest-react-native", 
    "moduleFileExtensions": ["js", "android.js", "ios.js"], 
    "testRegex": "\\.scene\\.jest\\.jsx$" 
    } 
... 
関連する問題