javascript - 如何测试 React Native 模块?
问题描述
我开发了一个 React Native 模块(包装了一个 SDK),我对使用 mocha 创建一些单元测试很感兴趣。我对摩卡不是很熟悉,但我无法完全弄清楚如何进行。
我有我的反应原生模块,调用它react-native-mymodule
,我可以通过执行以下操作在应用程序中使用它:
npm install react-native-mymodule
react-native link react-native-mymodule
然后我可以导入我的模块:
import MySDK from "react-native-mymodule”;
我正在尝试对单元测试做类似的事情。在我的根目录中,我有一个test/
目录,我想在其中保存所有单元测试。
我的简单测试文件在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);
});
});
});
我尝试修改我在网上找到的关于编译模块的教程,但没有任何运气。这是一个文件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
在我的模块的根级别
{
"presets": ["flow", "react-native"],
"plugins": [
["module-resolver", {
"root": [ "./js/" ]
}]
]
}
我有一个test/mocha.opts
文件:
--require babel-core/register
--require test/setup.js
我正在使用:调用 mocha,./node_modules/mocha/bin/mocha
但出现错误:
Error: Cannot find module 'react-native-mymodule'
任何人都可以告诉我测试反应原生模块的最佳方法吗?
解决方案
如果你想测试原生模块,我建议如下:
1. E2E 测试
Node.js 独立无法解释本机模块。如果您想在应用程序的上下文中测试本机模块,您需要使用 appium/webdriverio 创建 e2e 测试,而不是使用 mocha 编写单元测试。
有了这个,你实际上启动了一个安装了你的应用程序的模拟器。
资源:
- 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. 单元测试
如果您想为您的原生模块编写单元测试,请使用编写原生模块的语言编写它们
资源:
- 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
除此之外,您必须模拟模块。
推荐阅读
- java - 如何在 Java 中获取字符串的一部分?
- rust - 如果 ffi 函数修改了一个指针,那么拥有的结构是否应该被引用为可变的?
- javascript - Ag-grid 在一个单元格中渲染多行
- php - 如何在 Laravel 中设置一年后的到期日期
- excel - 在 Excel VBA 中具有多个标头的 XMLHttpRequest
- android - Android Kotlin:从 ViewModel 开始设置片段 TextView 背景
- pandas - 使用 pandas 展平时间序列 IoT 数据
- sql - 基于查询结果的动态 FROM 源
- accessibility - 如何让 nvda 在操作时读取一些状态消息?
- documentation - AttributeError:类型对象“ChatConsumer”没有属性“as_asgi()