当前位置: 首页 > 知识库问答 >
问题:

React Native-由于本机模块,单元测试失败

卜泓
2023-03-14

当我声明一个本机Java模块时,我发现了一个奇怪的异常——新代码没有通过单元测试。基本上,我从React Native中的NativeModules导入的任何内容都缺少定义:因此单元测试失败,因为类型错误:无法读取未定义的属性“HelloWorld”

复制步骤:

import { NativeModules } from 'react-native';

const Thing = NativeModules.SomeModule;

export const helloWorld = (addedText: string) => {
  return Thing.HelloWorld(addedText);
};

export default Thing;

但错误是

  TypeError: Cannot read property 'HelloWorld' of undefined

  4 |
  5 | export const helloWorld = (addedText: string) => {
> 6 |   return Thing.HelloWorld(addedText);
    |                ^
  7 | };
  8 |
  9 | export default Thing;

实际的Java是

public class SomeModule extends ReactContextBaseJavaModule  {

  SomeModule(ReactApplicationContext context) {
    super(context);
  }
  
  @Override
  public String getName() {
    return "SomeModule";
  }
  void HelloWorld(String addedText){
     try {
       Log.w("HELLO_WORLD", addedText);
     }
     catch (Exception e) {
       Log.e("DEVICE_MODULE_HELLO_WORLD_FAILED", "HelloWorld() Failed");
     }
  }
}

这运行良好(当您运行它时),但单元测试讨厌它。问题似乎是React Native测试缺乏对const helloWorld=(addedText: string)=结构的认识

declare namespace Thing {
   function helloWorld(addedText: string): void;
}

但在单元测试中,它仍然失败,我觉得简单地假设它被忽略了是不对的,所以我假设我一定是错误地实现了一些东西。有人能说明正确的方法吗?


共有1个答案

满雨石
2023-03-14
匿名用户

答案是模拟函数

在测试文件中,(对react native calls中代码的任何部分的测试(“bob chips”))(即它不导出到哪里),您必须模拟Java模块,如下所示。注意,这是启动失败测试的文件顶部的全局(一次)-可能您将helloWorld(“bob chips”)放在位置。tsx如果是,可能是位置。测验tsx失败-因为它引用了helloWorld(“bob chips”),如果在测试失败的测试中是这样的话-在内部位置。测验tsx-在文件顶部执行一次:

jest.mock('react-native', () => {
  const RN = jest.requireActual('react-native');
  RN.NativeModules.SomeModule = {
    HelloWorld: jest.fn(),
  };

  // mock modules created through UIManager
  RN.UIManager.getViewManagerConfig = (name) => {
    if (name === 'SomeModule') {
      return { HelloWorld: jest.fn() };
    }
    return {};
  };
  return RN;
});

然后抑制尝试测试它的笑话,并允许您在java中编写测试以进行补偿

 类似资料:
  • 我正在尝试为一个现有的应用程序编写单元测试用例,该应用程序有多个模块,每个模块中都有主类。有多个类具有\@SpringBootApplication。我写了一个简单的测试用例,它失败了,错误如下。我如何继续我的测试用例中的一个。 java.lang.IllegalStateException:在文件[C:\My Data\Workspace\Services2\MicroServices\Repo

  • 问题内容: 正如我们在http://docs.angularjs.org/tutorial/step_07中看到的那样, 建议通过e2e测试来完成路由测试, 但是,我认为’$ routeProvider’配置是通过单个函数function($ routeProvider)完成的,我们应该能够在不涉及浏览器的情况下进行单元测试,因为我认为路由功能不需要浏览器DOM。 例如, 当url为/ foo时,

  • 我的spark应用程序中有一个方法从MySQL数据库加载数据。该方法看起来如下所示。 该方法除了执行方法并从数据库加载数据外,其他什么都不做。我该如何测试这种方法呢?标准方法是创建对象的模拟,该对象是的实例。但是由于有一个私有构造函数,所以我无法使用Scalamock来模拟它。 这里的主要问题是,我的函数是一个纯粹的副作用函数(副作用是从关系数据库拉数据),如果我在嘲笑时遇到问题,我如何单元测试这

  • 我想找到一种方法对我的定制nginx模块进行单元测试,但失败了。有人能提供一些建议吗?我曾经找到过Test::Nginx框架,但它可以作为系统测试。有人告诉我,我可以使用ngx_lua_模块通过FFI的方式在nginx模块中公开C函数。有人知道怎么做吗?

  • 我不熟悉匕首。我创建了一个非常简单的单元测试,试图理解我应该如何使用dagger。不幸的是,它失败了。我可能还不了解匕首的一些基本原理。 而我的测试课失败了 我认为dagger会将B注入A,因为A希望注入B,DaggerModule包含一个@Providers注释方法,该方法创建B。 更新: 我发现当我像这样编写模块类时 将B注入A作品中。然而,我不理解为什么当模块有一个构造a实例的带注释的方法时

  • 问题内容: 我是Mocha的新手,我正试图用它来测试一个简单的React组件。如果react组件没有任何CSS样式,则测试将通过,但是如果React组件内的标签包含任何className,则会引发语法错误: Testing.react.js testing.jsx 测试将通过: 在输入标签内添加className之后,出现错误: 测试结果: 我已经在网上搜索过,但到目前为止还没有运气。我想念什么吗