【发布时间】:2019-10-03 03:10:38
【问题描述】:
我开发了一个 React Native 模块(包装了一个 SDK),我对使用 mocha 创建一些单元测试很感兴趣。我对摩卡不是很熟悉,但我不知道该怎么做。
我有我的 react 原生模块,称之为 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);
});
});
});
我尝试修改了一个tutorial,我在网上找到了编译模块,但没有任何运气。这是一个文件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
我正在使用:./node_modules/mocha/bin/mocha 调用 mocha,但出现错误:
Error: Cannot find module 'react-native-mymodule'
谁能告诉我测试反应原生模块的最佳方法?
【问题讨论】:
-
不确定我是否理解?您是要导出 sdk 以便在手机上进行测试还是已经构建了 sdk?您是在有或没有博览会的情况下进行开发吗?
-
@RachelGallen 我有一个包含原生 SDK 的“原生模块”,例如 facebook 有这个:github.com/facebook/react-native-fbsdk。测试这种东西的最佳方法是什么?
-
您有什么理由 don`t want to create an alias 并模拟该模块吗?这个问题可能是由transforms 引起的吗?你也可以check this issue。
-
我会尝试隔离问题并将新项目设置为in this guide,尝试使其工作,然后导入您的模块。隔离可以帮助您了解导致问题的原因。我们不知道这是由
babel引起的还是由测试环境中的node_modules目录问题引起的 -
请原谅我的无知,但是模块的测试不应该是模块源的一部分而不是其他地方吗?作为模块的用户/消费者,我依赖我的依赖项进行单元测试。在消费部分,即我的应用程序中,我模拟模块,因为我知道模块可以工作(正在单元测试和所有)
标签: javascript reactjs react-native mocha.js