Javascript 如何测试React本机模块?

Javascript 如何测试React本机模块?,javascript,reactjs,react-native,mocha.js,Javascript,Reactjs,React Native,Mocha.js,我开发了一个React本机模块(包装SDK),我对使用mocha创建一些单元测试感兴趣。我对摩卡咖啡不太熟悉,但我不知道该怎么做 我有我的react-native模块,称之为react-native-mymodule,我可以通过以下操作在应用程序中使用: npm安装react-native-mymodule react-native-link react-native-mymodule 然后,我可以使用以下工具导入我的模块: 从“react native mymodule”导入MySDK; 我正

我开发了一个React本机模块(包装SDK),我对使用mocha创建一些单元测试感兴趣。我对摩卡咖啡不太熟悉,但我不知道该怎么做

我有我的react-native模块,称之为
react-native-mymodule
,我可以通过以下操作在应用程序中使用:

npm安装react-native-mymodule

react-native-link react-native-mymodule

然后,我可以使用以下工具导入我的模块:

从“react native mymodule”导入MySDK;

我正试图对单元测试做类似的事情。在我的根目录中,我有一个
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
我正在使用:
/node\u modules/mocha/bin/mocha
调用mocha,我得到一个错误:

错误:找不到模块'react native mymodule'


有人能告诉我测试react本机模块的最佳方法吗?

如果您想测试本机模块,我建议如下:

1.E2E测试 Node.js standalone无法解释本机模块。如果要在应用程序的上下文中测试本机模块,请使用appium/webdriverio创建e2e测试,而不是使用mocha编写单元测试

这样,您就可以在安装了应用程序的情况下启动模拟器

资源:

2.单元测试 如果要为本机模块编写单元测试,请使用本机模块所用的语言编写单元测试

资源:


除此之外,您还必须模拟模块


我不确定是否理解?您是否希望导出sdk以便在手机上进行测试,还是已经构建了sdk?您是在使用expo还是不使用expo进行开发?@RachelGallen我有一个“本机模块”它包装了本机SDK,例如facebook有以下内容:。测试这样的东西的最好方法是什么?你有什么理由嘲笑这个模块吗?这个问题是否可能是由以下原因引起的?你也可以这样做。我会尝试隔离问题并设置一个新项目,尝试让它工作,然后导入你的模块。隔离可能有助于您了解导致问题的原因。我们不知道这是否是由测试环境中的
babel
node\u modules
目录问题引起的请原谅我的无知,但是模块的测试不应该是模块源代码的一部分而不是其他地方吗?作为模块的用户/消费者,我依靠依赖项进行单元测试。在消费部分,即我的应用程序中,我模拟模块,因为我知道该模块可以工作(正在进行单元测试),而且您可以使用Ezyme,Ezyme是React的JavaScript测试实用程序,它可以更轻松地测试React组件的输出。这也是E2E测试的好选择。使用Appium和Detox甚至Espuesto和XCUITest都可以对本机模块进行UI测试,但我现在想知道的是,是否可以启动应用程序并使用Appium或Detox导航到本机模块,然后触发XCUITest或Espresso?假设您正在移植一个已经存在的本机应用程序(带有E2E测试),以进行本机反应。@samk使用Appium应该可以