2016-07-10 10 views
4

コンポーネントがネイティブモジュールを含むライブラリをインポートしています。ここでは不自然な例です:サードパーティをモックする方法ネイティブNativeModulesに反応する?

import React from 'react'; 
import { View } from 'react-native'; 
import { Answers } from 'react-native-fabric'; 

export default function MyTouchComponent({ params }) { 
    return <View onPress={() => { Answers.logContentView() }} /> 
} 

そして、ここではreact-native-fabricからAnswersの関連する部分である:

var { NativeModules, Platform } = require('react-native'); 
var SMXAnswers = NativeModules.SMXAnswers; 

モカテストでこのコンポーネントをインポートする場合、これはSMXAnswersであることを考慮に失敗しundefined

SMXAnswersまたはreact-native-fabricをどうやって壊れないようにして、テストすることができますかURのコンポーネントですか?

p.s .: GitHubでテストしようとしているfull setupcomponentが表示されます。そのような任意のネイティブモジュール模擬する

+1

私は私が持っているとまったく同じ質問を見つけました。残念ながら、答えはありません(現在)。あなたはこれに対する解決策を見つけましたか? – Michael

+0

@Michael私は昨日下の質問に答えました。あなたはそれを見ましたか? –

+1

ご質問ありがとうございます。私は実際に同様の質問を作成しました:http://stackoverflow.com/questions/39633977/react-native-testing-mocking-redux-async-action-creators今のところ私は自分のネイティブの依存関係を別のモジュールに移動したので、テストに干渉することはありません。しかし、私はあなたのMockery-setupを間違いなく使用します。 – Michael

答えて

2

使用mockery:ここ

import mockery from 'mockery'; 

mockery.enable(); 
mockery.warnOnUnregistered(false); 
mockery.registerMock('react-native-fabric', { 
    Crashlytics: { 
    crash:() => {}, 
    }, 
}); 

は完了setup exampleです:最後に

import 'core-js/fn/object/values'; 
import 'react-native-mock/mock'; 

import mockery from 'mockery'; 
import fs from 'fs'; 
import path from 'path'; 
import register from 'babel-core/register'; 

mockery.enable(); 
mockery.warnOnUnregistered(false); 
mockery.registerMock('react-native-fabric', { 
    Crashlytics: { 
    crash:() => {}, 
    }, 
}); 

const modulesToCompile = [ 
    'react-native', 
].map((moduleName) => new RegExp(`/node_modules/${moduleName}`)); 

const rcPath = path.join(__dirname, '..', '.babelrc'); 
const source = fs.readFileSync(rcPath).toString(); 
const config = JSON.parse(source); 

config.ignore = function(filename) { 
    if (!(/\/node_modules\//).test(filename)) { 
    return false; 
    } else { 
    const matches = modulesToCompile.filter((regex) => regex.test(filename)); 
    const shouldIgnore = matches.length === 0; 
    return shouldIgnore; 
    } 
} 

register(config); 
関連する問題