Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to test React Native Module?

I developed a React Native module (wrapping an SDK) and I’m interested in creating some unit tests using mocha. I’m not very familiar with mocha, but I can’t exactly figure out how to proceed.

I have my react native module, call it react-native-mymodule which I can use in an app by doing:

npm install react-native-mymodule

react-native link react-native-mymodule

Then I can import my module with:

import MySDK from "react-native-mymodule”;

I’m trying to do a similar thing with unit tests. In my root directory I have a test/ directory which is where I want to hold all my unit tests.

My simple test file in test/sdk.tests.js

import MySDK from "react-native-mymodule”; var assert = require('assert');   describe(‘MySDK’, function() {   describe('#indexOf()', function() {     it('should return -1 when the value is not present', function() {       assert.equal([1, 2, 3].indexOf(4), -1);     });   }); }); 

I’ve tried modifying a tutorial I found online on compiling modules, but haven’t had any luck. This is a file test/setup.js:

import fs from 'fs'; import path from 'path'; import register from 'babel-core/register';  const modulesToCompile = [   'react-native-mymodule’ ].map((moduleName) => new RegExp(`${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 {     return false;   } }  register(config); 

.babelrc in the root level of my module

{   "presets": ["flow", "react-native"],     "plugins": [       ["module-resolver", {         "root": [ "./js/" ]       }]     ] }  

I have a test/mocha.opts file:

--require babel-core/register --require test/setup.js 

I’m invoking mocha with: ./node_modules/mocha/bin/mocha and I get an error:

Error: Cannot find module 'react-native-mymodule'

Can anyone advise me on the best way to test react native modules?

like image 293
Clip Avatar asked May 15 '19 22:05

Clip


People also ask

How do you test components in react native?

Testing Rendered Output​ Welcome to React Native! With snapshot testing, you typically first implement your component and then run the snapshot test. The snapshot test then creates a snapshot and saves it to a file in your repo as a reference snapshot. The file is then committed and checked during code review.

How do I test API in react native?

Adding Jest to the React Native applicationCreate a file named App. test. js , and add the details as shown below: import React from "react"; import renderer from "react-test-renderer"; import App from "./App.


1 Answers

If you want to test native modules, I suggest the following:

1. E2E Tests

Node.js standalone cannot interpret native modules. If you want to test native modules in the context of your app, you want to create e2e tests using appium/webdriverio instead of writing unit tests with mocha.

With this, you actually start an emulator with your app installed.

Resources:

  • http://appium.io/docs/en/about-appium/intro/?lang=de
  • https://medium.com/jetclosing-engineering/react-native-device-testing-w-appium-node-and-aws-device-farm-295081129790
  • https://medium.com/swlh/automation-testing-using-react-native-and-appium-on-ubuntu-ddfddc0c29fe
  • https://webdriver.io/docs/api/appium.html

2. Unit Tests

If you want to write unit tests for your native module, write them in the Language the Native Module is written in

Resources:

  • https://www.swiftbysundell.com/basics/unit-testing/
  • https://junit.org/junit5/
  • https://developer.apple.com/documentation/xctest
  • https://cmake.org/cmake/help/latest/manual/ctest.1.html


Other than that, you have to mock the modules.
  • https://jestjs.io/docs/en/mock-functions
  • https://sinonjs.org/releases/latest/mocks/
  • https://www.npmjs.com/package/mock-require
like image 176
Tom M Avatar answered Oct 13 '22 20:10

Tom M