Jet

Accelerate your React Native module development by testing inside NodeJS; mock-free and native test code free. Perfect for module developers wanting full E2E testing & CI.

Jet lets you bring your React Native JS code into NodeJS and test it mock free and native testing code free. Perfect for React Native module developers who want to fully test their packages end-to-end and setup continuous integration services.

Jet extends upon wix/detox and by default the Mocha testing framework.

Detox provides all the functionality you'll need to control your testing app, device and it's UI (if you have one) whilst Jet allows JS code execution in the context of your RN app via Node.js - giving you full access to all the Native api's exactly like you'd have inside your app.

Features

⏩ Test with JavaScript

Your test suites and your React Native code run inside NodeJS - making testing your modules with NodeJS testing frameworks (mocha only currently) easy.

test suite

? Debugging

Supports debugging your test suites and your React Native JS bundle using the standard NodeJS debugger protocol.

debugging

? Coverage

Get full code coverage output for your React Native module's JS API using istanbul/nyc coverage tools.

coverage

☕️ Full Detox API support

Supports the full Detox API; reloading or relaunching your app automatically reconnects to your React Native JS bundle.

detox

✨ Full access to React Native bundle context

Jet gives you full access to the JS context of your React Native app inside NodeJS ⚡️.

Some examples of what you can do with this power:

  • Expose your root view/component to Jet on mount; allowing you to then programatically modify it inside tests, e.g. calling setState() on it inside a test - why not?
  • Expose your stores, allowing them to be controlled in tests - e.g. Redux.
  • Require any of your React Native apps bundled modules/files inside NodeJS, for example;
    • const { Platform } = jet.require('react-native'); - e.g. - platform specific test logic.
    • const CollectionReference = jet.require('dist/modules/firestore/CollectionReference'); - e.g. for instanceof tests.

Timing API -> NodeJS

Experimental

React Native JSTiming/Timing/RCTTiming modules in Jet run inside NodeJS, this means that all timers are handled directly in NodeJS with no calls to Native device APIs using Jets custom Timing class

This greatly increases the speed of tests and reduces round trips to native. Additionally this bypasses issues such as Android device time drifting (due to a incorrect date/time on device). This can also potentially be used to monitor FPS or control the FPS rate programmatically.

GitHub