admin管理员组文章数量:1287831
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 piling 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?
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 piling 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?
Share Improve this question edited May 21, 2019 at 22:12 Clip asked May 15, 2019 at 22:20 ClipClip 3,0789 gold badges43 silver badges78 bronze badges 7- Not sure I understand? are you looking to export an sdk so you can test it on a phone or have you built the sdk already? Are you developing with or without expo? – Rachel Gallen Commented May 21, 2019 at 22:26
- @RachelGallen I have a "native module" which wraps native SDK's, for example facebook has this: github./facebook/react-native-fbsdk. Whats the best way to test something like that? – Clip Commented May 21, 2019 at 22:32
- 2 is there some reason you don`t want to create an alias and mock that module? could this issue be caused from the transforms? also you may want to check this issue. – fabOnReact Commented May 22, 2019 at 13:22
-
I would try to isolate the problem and set up a new project as in this guide, try to get it to work and then import your module. Isolating may help you understand what is causing the issue. We don't know if this is caused from
babel
or from issues with thenode_modules
directories in test environment – fabOnReact Commented May 22, 2019 at 13:22 - 4 please forgive my ignorance, but shouldn't the tests for the module be part of the module source and not be somewhere else? As a user/consumer of modules I rely on my dependencies to be unit tested. In the consuming part, i.e. my app, I mock modules because I know the module works (being unit tested and all) – konqi Commented May 28, 2019 at 13:12
1 Answer
Reset to default 5If 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./jetclosing-engineering/react-native-device-testing-w-appium-node-and-aws-device-farm-295081129790
- https://medium./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./basics/unit-testing/
- https://junit/junit5/
- https://developer.apple./documentation/xctest
- https://cmake/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/releases/latest/mocks/
- https://www.npmjs./package/mock-require
本文标签: javascriptHow to test React Native ModuleStack Overflow
版权声明:本文标题:javascript - How to test React Native Module? - Stack Overflow 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/web/1741329205a2372671.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论