2016-07-10 9 views
4

Eine Komponente importiert eine Bibliothek, die ein natives Modul enthält. Hier ist ein konstruiertes Beispiel:Wie man Dritte verspottet Reaction Native 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() }} /> 
} 

Und hier ist der relevante Teil von Answers von react-native-fabric:

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

Wenn diese Komponente in einem Mokka Test importieren, dies nicht gelingt wegen, dass SMXAnswers ist undefined :

Wie machst du SMXAnswers oder react-native-fabric, so dass es nicht bricht und Sie yo testen können Ihre Komponenten?

ps .: Sie können die full setup und die component Ich versuche, auf GitHub testen.

+1

Endlich fand ich genau die gleiche Frage, die ich habe. Leider gibt es keine Antworten (ab sofort). Haben Sie eine Lösung dafür gefunden? – Michael

+0

@Michael Ich habe gestern meine Frage beantwortet. hast du es gesehen? –

+1

Vielen Dank für die Beantwortung Ihrer Frage. Ich habe tatsächlich eine ähnliche Frage erstellt: http://stackoverflow.com/questions/39633977/react-native-testing-mocking-redux-async-action-creators. Für jetzt habe ich meine nativen Abhängigkeiten zu einem separaten Modul verschoben, so dass es meine Tests nicht beeinträchtigt. Aber ich werde auf jeden Fall dein Spick-Setup benutzen. – Michael

Antwort

2

Verwenden mockery keine nativen Module wie so lustig zu machen:

import mockery from 'mockery'; 

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

ist die komplette 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); 
Verwandte Themen