ios - 如何测试使用 Jest 导入自定义 native 模块的 React Native 组件?

标签 ios facebook unit-testing react-native jestjs

这是我尝试使用 React Native 0.39 和 Jest 18 测试的一个简单组件:

// index.ios.js

import React, { Component } from 'react';
import { AppRegistry, NativeModules, View } from 'react-native';

export default class TestProject extends Component {
  componentDidMount() {
    NativeModules.TestModule.test();
  }

  render() {
    return <View style={{ flex: 1 }} />;
  }
}

AppRegistry.registerComponent('TestProject', () => TestProject);

这是 TestModule 及其 test 方法:

// ios/TestProject/TestModule.m

#import "TestModule.h"

@implementation TestModule

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(test){
  NSLog(@"This is a test");
}

@end

以下测试失败并出现错误 TypeError: Cannot read property 'test' of undefined:

// __tests__/index.ios.js

import 'react-native';
import renderer from 'react-test-renderer';
import React from 'react';
import Index from '../index.ios.js';

it('renders correctly', () => {
  const tree = renderer.create(
    <Index />
  );
});

我已经阅读了关于如何 Mock native modules using jest.mock 的 Jest 文档,但我仍然不清楚如何扩展 Jest 的 NativeModules 模拟以包含我上面的 TestModule 类。

最佳答案

您可以简单地在您的原生模块所在的位置添加一个 mock:

import {
  NativeModules,
} from 'react-native';
import React from 'react';
import renderer from 'react-test-renderer';

describe('TestProject', () => {
  beforeEach(() => {
    NativeModules.TestModule = { test: jest.fn() } 
  });
  ...
});

关于ios - 如何测试使用 Jest 导入自定义 native 模块的 React Native 组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41339996/

相关文章:

php - 从 app_scoped_user_id 中查找 Facebook 全局配置文件 ID

php - 当用户通过 facebook 使用连接时无法从网站注销用户

javascript - 未引用脚本的 Console.log

javascript - 如何在单元测试环境中模拟 browserHistory?

ios - 在 iOS 项目中使用 bundle 时出错/如何创建正确的 bundle ?

ios - MvvmCross:RaisePropertyChanged 不更新绑定(bind)

ios - 在 iOS 中点击时如何更改 UITableView 标题背景颜色

java - Maven - 将 "main"文件夹与 "tests"文件夹同步

java - 单元测试方法在运行测试时不使用模拟对象。而是调用实际的类和方法

ios - 是否可以在 IOS 中重新创建 dSYM 文件?