首页 > 解决方案 > 如何测试 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'

任何人都可以告诉我测试反应原生模块的最佳方法吗?

标签: javascriptreactjsreact-nativemocha.js

解决方案


如果你想测试原生模块,我建议如下:

1. E2E 测试

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

有了这个,你实际上启动了一个安装了你的应用程序的模拟器。

资源:

2. 单元测试

如果您想为您的原生模块编写单元测试,请使用编写原生模块的语言编写它们

资源:


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


推荐阅读