reactjs - Jest 对于外部 npm 包失败

标签 reactjs react-native jestjs

我第一次在 React 中使用 jest,这次我在 React Native 项目中使用它。它与下面的代码完美配合。

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


export default class Login extends Component {
  render() {
    return (
      <View>
        <Text>Login Page</Text>
      </View>
    )
  }
}

但是从我的组件库添加一个按钮后,测试失败了。

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

import { Button } from 'tc-components';    

export default class Login extends Component {
   render() {
      return (
        <View>
          <Text>Login Page</Text>
          <View>
            <Button onPress={this.loginHandler.bind(this)}>Log in</Button>
          </View>
        </View>
      )
   }
}   

错误信息

- SyntaxError: Unexpected reserved word
        at transformAndBuildScript (node_modules/jest-runtime/build/transform.js:306:10)
        at Object.<anonymous> (app/scenes/Activity.js:2:17)
        at Object.<anonymous> (__tests__/Activity-test.js:3:15)
1 test suite failed, 0 tests passed (0 total in 1 test suite, run time 1.261s)

最佳答案

需要在测试文件中手动模拟tc-component

jest.mock('tc-component', () => {
  const React = require('react');
  const TC = {}

  const createComponent = (type) => {
    return React.createClass({
      displayName: type,
      propTypes: {
        children: React.PropTypes.node
      },
      render() {
        return <div {...this.props}>{this.props.children}</div>;
      }
    });
  };

  TC.Button = createComponent("Button");

  return TC;
});

import 'react-native';
import React from 'react';

import Activity from '../scenes/Activity';

// Note: test renderer must be required after react-native.
import renderer from 'react-test-renderer';

describe('Activity', () => {

  it('renders correctly', () => {
    const tree = renderer.create(
      <Activity />
    ).toJSON();
    expect(tree).toMatchSnapshot();
  });

});

关于reactjs - Jest 对于外部 npm 包失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39074906/

相关文章:

java - 如何从 ReactApplication 中的 ReactNativeHost 中获取 MainActivity (ReactActivity)

typescript - 为什么将 jest 升级到 29.5.0 会破坏我的模拟?

unit-testing - 如何使用 Jest 对 quasar 应用程序进行单元测试?

reactjs - 使用多个调度(加载,错误和成功)测试 Action

reactjs - 如何在类型为 ="number"的 TextInput 中仅输入整数值

javascript - 如何测试元素(标签)是否用 jest/enzyme 渲染?

javascript - react : do something while all components are mounted

javascript - react 三元运算符错误

javascript - 如何在 firestore 中离线读取文档并写入(在线和离线)?

react-native - 检测应用程序在 React Native 中获得焦点