javascript - 如何测试私有(private) React 组件

标签 javascript reactjs ecmascript-6

我最近在 React 项目中接受了一份尚未使用 ES6 的工作。我有 ES6 背景,刚刚写了一个大文件,我无法弄清楚如何在不使用 ES6 的情况下进行测试。

基本上,我有一个主要组件,它有大约 7 个左右的私有(private)组件,这些组件大多作为单独的组件构建,以提高可读性、测试和性能。 (能够对私有(private)组件进行应该组件更新是一个巨大的提升)

这是我的问题:

如果不导出我的私有(private)组件,我就找不到编写测试它们的方法。

因为我们没有使用 ES6,所以我无法使用

export default MyComponent
export PrivateComponent1
export PrivateComponent2

语法,我知道从单个文件导出多个组件的唯一方法是使用

exports.MyComponent = MyComponent
exports.PrivateComponent1 = PrivateComponent1
exports.PrivateComponent2 = PrivateComponent2

但是这不好,因为在 require 语句中我需要使用

const MyComponent = require('MyComponent').MyComponent

理想情况下,我想使用类似的东西:

module.exports = MyComponent
exports.PrivateComponent1 = PrivateComponent1
exports.PrivateComponent2 = PrivateComponent2

但这似乎无效。

此外,最好不要将其分解为单独的文件。

...这就是我不做 TDD 所得到的结果:(

最佳答案

CommonJS 模块

module.exports = MyComponent
exports.PrivateComponent1 = PrivateComponent1
exports.PrivateComponent2 = PrivateComponent2

这是不可能的,因为 exportsmodule.exports 的别名,并且在设置 module.exports 中的属性 exports 不会被导出。

转译器 ( Babel ) 所做的是创建一个“默认”属性。

ES2015

所以,ES2015 中的代码如下:

import AnotherModule from './anotherModule';

export default class Foo {}

export class Bar {}

将被转译为:

'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.Bar = undefined;

var _anotherModule = require('./anotherModule');

var _anotherModule2 = _interopRequireDefault(_anotherModule);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }

var Foo = function Foo() {
  _classCallCheck(this, Foo);
};

exports.default = Foo;

var Bar = exports.Bar = function Bar() {
  _classCallCheck(this, Bar);
};

注意行 exports.default = Foo;var Bar =exports.Bar = ...

为了在不使用 ES2015(也不使用转译器)的情况下将该模块导入到另一个文件中,您可以使用 var Foo = require('./myPreviousModule').default

Babel 创建了一个互操作函数(请参阅函数 _interopRequireDefault),以允许用户以相同的方式导入 Node CommonJS 模块和 ES2015 模块。

关于javascript - 如何测试私有(private) React 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42304979/

相关文章:

reactjs - React : `return` an array from component, `key` 值问题

javascript - 在 ES6 类属性上设置 Angular 服务会影响其功能

ReactJs 切换按钮打开菜单

javascript - RxJS 中的映射失败?

javascript - 处理 200 多个存储在状态中的复选框

javascript - 等待每个完成在 react 中使用 setState

javascript - 为什么 WeakMaps 不可迭代?

javascript - 在 React 应用程序中添加 add sass/scss 的最佳方法是什么?

使用参数调用 VBA 例程的 JavaScript

php - 有没有更好的方法来跟踪标签的分页?