React: 通过公共 API 表达更多测试

创建于 2017-10-20  ·  133评论  ·  资料来源: facebook/react

这是一个很好的贡献机会。
我们需要在公共 API 方面重写更多的单元测试。

这意味着他们只能导入诸如reactreact-domreact-dom/test-utilsreact-test-renderer等 npm 入口点,但不能导入诸如SyntheticEvent之类的内部模块ReactDOMComponentTree 。 “坏”需求已经在测试中标有 TODO,因此您不会错过它们。

为了帮助解决这个问题:

  1. 在下面无人认领的测试文件中找到// TODO: can we express this test with only public API?
  2. 如果您想获取特定的单元测试文件,请在此问题中评论它的名称。
  3. 提交改写测试以使用公共 API 的 PR。

第 3 步需要一些思考。 您可以使用我们之前使用公共 API 重写测试的示例来获取灵感。 例如:

通常,您需要考虑您正在测试的行为如何在 React 应用程序中实际重现,然后对其进行测试。 在极少数情况下,它可能涉及将某些 API 公开,我们需要单独讨论,所以不要犹豫,开始讨论! 如果您不知道如何使用公共 API 重写某些特定测试,请在此处发表评论,我们可以进行头脑风暴。

这是需要更改的测试的完整列表。 其中一些可能是简单的单行更改,有些可能涉及一些重写,有些可能需要从头开始重写。 有些甚至可能是不可能的,但得出这一结论的研究仍然非常有价值,我们很想知道这一点。

试试看,让我们知道:

更新:现在进行所有测试。 如果有人没有时间完成工作,他们可能会在未来腾出时间。


第一次投稿?

不清楚如何修复特定测试?

如果您放弃了某些测试,请将您的发现发表在评论中,以便我们决定下一步该做什么。


medium good first issue (taken)

最有用的评论

我们有第一个合并的 PR!

看一看: https ://github.com/facebook/react/pull/11309

如果您正在处理与事件相关的任何事情,我建议您阅读https://github.com/facebook/react/pull/11309中的讨论和以下内容中的评论:

https://github.com/facebook/react/pull/11316
https://github.com/facebook/react/pull/11317
https://github.com/facebook/react/pull/11327
https://github.com/facebook/react/pull/11332

有一些共同的主题,利用这些讨论来引导其他 PR 朝着正确的方向发展可能很有价值。

所有133条评论

我可以在周末看看这个,看看我是否能在短期内解决它。

万分感谢! 如果您选择任何特定的测试,请在线程中使用文件名进行评论,以免其他人开始进行相同的测试。

我绝对有兴趣为此做出贡献。 我将在这个周末浏览并找到重构的机会!

我也有兴趣👍

我在第一篇文章中发布了一个测试列表。 只要让我知道你想带哪些,我会分配给你。

ReactDOMInput-test对我很好 :)

@SadPandaBear你明白了!

我可以在ReactErrorUtils-test上工作。 😄

我会看看setInnerHTML-test.js

我会做getEventCharCode-test.js 。 😀

我可以在getEventKey-test.js上工作。

我可以拿escapeTextContentForBrowser-test.js

我想试一试ChangeEventPlugin-test.js :)

我可以拿SyntheticEvent-test.js

我想为EnterLeaveEventPlugin-test.js工作

我想为ReactDOMEventListener-test.js工作

我想拿BeforeInputEventPlugin-test.js

我想使用 SyntheticKeyboardEvent-test.js。 谢谢👍

让我拿inputValueTracking-test.js

我想为SyntheticWheelEvent-test.js工作

我可以拿: ReactBrowserEventEmitter-test.js吗?

我正在服用SelectEventPlugin-test.js

我想为ReactDOMComponentTree-test.js工作

我想研究 ReactTreeTraversal-test.js

你好! 👋 我想在ReactCoroutine-test.js工作

我可以拿SyntheticClipboardEvent-test.js

我想为validateDOMNesting-test.js工作

我可以拿EventPluginRegistry-test.js

我想试试ReactDOMComponent-test.js

你好! 我想试试quoteAttributeValueForBrowser-test.js ! :肌肉:

你好! 我想试试ReactDOMServerIntegration-test.js

我要ReactIncrementalPerf-test.js

我会做 getNodeForCharacterOffset-test.js

@burnsbeaver是哪一个, FallbackCompisitionState-test还是getNodeForCharacterOffset-test ? 我们希望从每人一项测试开始。

请getNodeForCharacter。 我删除了另一条评论,很抱歉造成混乱!

我们还有FallbackCompositionState-test.jsReactFiberHostContext-test.js免费!

我将采用 FallbackCompisitionState!

我可以试试 ReactFiberHostContext-test.js

更新:现在进行所有测试。 订阅本期! 如果有人没有时间完成工作,他们可能会在未来腾出时间。 如果有一些测试可以再试一次,我们会发表评论。

感谢所有参加测试的人——谢谢! 我想重申解决方案并不总是很清楚,在某些情况下,如果不对 React 源本身进行一些更改,甚至可能无法合理地测试行为。 如果您觉得卡住了,请在此处发表评论,我们将尝试制定计划。

@adsonpleal很抱歉让你失望了——我刚刚检查过了,不幸的是我们不小心已经修复ReactFiberHostContext-test 。 起初我没有意识到这一点,但 TODO 已经过时了。 这是我能看到的唯一一个已经修复的测试。

@gaearon哇,重构ReactDOMInput-test会花费我一些时间,但我希望我能在这个周末完成所有事情。

我有一个小疑问:
是否可以将使用inputValueTracking的函数setUntrackedValue的所有行为替换为ReactTestUtils.Simulate.?之类的东西?

顺便说一句,你可以在这里查看我的 PR,看看我做了什么来删除inputValueTracking 。 我知道其中一些测试可能依赖于inputValueTracking中非常具体的东西,但我只是想知道是否可以有效地使用ReactTestUtils代替。

对于inputValueTracking @jquense应该最了解如何做到最好。 但是,只要您让它发挥作用,我们就可以审查并查看该方法是否有效。

只是提醒其他人,我安装了旧版本的纱线(0.22)并试图在本地运行测试并且一切都失败了。 将 yarn 升级到最新版本(1.2.1)解决了这个问题,测试现在运行良好。

@sadpandabear我的测试文件中有相同的模块,所以我很快就会检查你的实现

@gaearon对于setInnerHTML测试,他们觉得他们依赖于setInnerHTML的存在才能使测试套件有意义。

我可以编写一些测试来替换现有功能,但是测试套件更多地是设置内部 html,而不是任何特定于setInnerHTML的东西。 我想我对测试套件的命名有点犹豫了。

编辑:除非我弄错了……SVG 有一个innerHTML属性。 不确定此文件中的第二个测试块是否必要。

@silvestrijonathan我认为这些测试真正试图验证的是dangerouslySetInnerHTML在 React 中按预期工作。 因此,如果您修改这些测试以使用 ReactDOM 并使用dangerouslySetInnerHTML呈现相同的内容,那就足够了。 如果您觉得这样更合适,可以将测试重命名为dangerouslySetInnerHTML-test

在玩了几个小时我的测试文件后,我对新手(比如我)有一个强烈的建议:用干净的环境(文件)开始你的测试。
我正在编辑现有文件,它模拟了一些内部函数,所以一些ReactTestUtils函数被破坏了!! 我花了一段时间才意识到为什么事情没有按预期工作..

@gaearon我认为我们需要澄清ReactTestUtils ,包括模拟事件,应该被视为私有 API。 这间接地涉及到内部 API,因此它不允许我们正确测试它在其他情况下的工作方式。 例如,它会妨碍我们在不暴露那些钩子的情况下测试编译包的能力,并且它不会让我们测试一个新的非合成事件系统。

@dphurley ,我注意到您正在处理ReactIncrementalPerf-test 。 我也在开发一个使用ReactCoroutine的测试套件,所以我想给你一个关于这个 PR:#11338 的提示。
我不确定你是否已经提交了 PR,但如果你还没有提交,那么最好将它作为 #11338 的基础(如果它被接受的话)。

@gaearon感谢您的建议。 我考虑过使用React-DOMdangerouslySetInnerHTML进行测试,所以我会这样做!

是的,在这种情况下,我可能会将测试重命名为。 在第二天左右寻找我的 PR。

我们有第一个合并的 PR!

看一看: https ://github.com/facebook/react/pull/11309

如果您正在处理与事件相关的任何事情,我建议您阅读https://github.com/facebook/react/pull/11309中的讨论和以下内容中的评论:

https://github.com/facebook/react/pull/11316
https://github.com/facebook/react/pull/11317
https://github.com/facebook/react/pull/11327
https://github.com/facebook/react/pull/11332

有一些共同的主题,利用这些讨论来引导其他 PR 朝着正确的方向发展可能很有价值。

很棒的参考,谢谢!

工作有点忙,但我想这个周末我可以为我的测试打开一个 PR。

我还没有调查我接受的测试。 忙于其他事情。 过几天我会尝试提高 PR,我可以争取一些时间吗?

听起来不错,当然!

我有同样的问题

写了一个关于我如何处理其中一个测试的小分析。 https://github.com/facebook/react/pull/11385#issuecomment -341934588

据我所知,它们都被占用了,如果有空请在此处发布,我会观看

我合并了另外两个专门处理SyntheticEvent的 PR。 如果您进行了任何相关测试,请检查它们并尝试在风格和方法上进行匹配: https ://github.com/facebook/react/pull/11365 和https://github.com/facebook/react/issues/ 11299

@gaearon对于EventPluginRegistry-test.js ,我们应该如何使用公共 API 重写测试,我看到我们在 ReactDom.js -> ReactDOMClientInjection.js 中注入了默认插件
{
简单事件插件,
EnterLeaveEvent 插件,
更改事件插件,
选择事件插件,
在输入事件插件之前,
}

那么我们如何准确地注入我们的测试模拟插件并测试EventPluginRegistry功能
我搜索了任何自定义插件并找到了react-tap-event-plugin来检查自定义插件是如何被注入的。
是注入插件的唯一方法吗

require('react-dom').__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.EventPluginHub.injection.injectEventPluginsByName({ 'TapEventPlugin': require('./TapEventPlugin.js')(shouldRejectClick) });

我担心我在ReactTreeTraversal-test.js上过头了
如果其他人想试一试,请随意。

@aqumus

EventPluginRegistry很棘手。 我想第一步是弄清楚它实际在哪里使用。 你是对的,点击事件插件是我们唯一仍然承诺支持的插件。 方便的是,我们在 repo 中有它。 所以也许我们可以添加一个它特别有效的测试?

RN 也可能使用EventPluginRegistry 。 我们是否有任何测试来验证 RN 事件是否有效? 我不知道。 注释掉EventPluginRegistry的不同部分并查看是否有任何测试失败是值得的。 如果相同的代码已经被其他碰巧强调这些代码路径的测试覆盖,我们可以删除它的私有 API 测试。 这有意义吗?

@gdevincenzi听起来不错,我将删除作业。

另外,我这周要离开,但请不要让这阻止你继续做这件事。 希望下周能合并更多提交的 PR。

我可以接受ReactTreeTraversal-test.js - 它是一个不熟悉的 API,但似乎是学习它的好机会。 欢迎咨询@gdevincenzi

祝贺@gordyd完成了一个相当复杂的任务: https://github.com/facebook/react/pull/11383。

这是一个很好的例子,说明代码在测试基本相同的东西之前和之后会有多么不同。 以及如何通过搜索引用、查看 git 历史记录和注释掉不同的行来弄清楚代码应该做什么。

我们尚未收到以下用户的 PR:

@email2vimalraj
@andrevargas
@tranotheron
@minerado
@sw-yx
@king0120
@aarboleda1
@danilowoz
@dms1lva
@morajabi
@dphurley
@reznord
@aqumus

您能否确认您是否开始着手这方面的工作? 我有更多的人想在队列中提供帮助,所以如果你没有时间,最好给其他人一个机会来解决这个问题。

@andrevargas刚刚注意到您在https://github.com/facebook/react/pull/11331 中的讨论。 我想将这些更改统一在那里是有意义的。

请将我添加到该队列@gaearon

@gaearon是的,你是对的。 只是为了确认一下, @jeremenichelli正在 #11331 中处理quoteAttributeValueForBrowser-test.js ,我知道这一点。 我认为您可以使用他的用户名和 PR 链接更新此线程。

也请把我加入队列@gaearon

@gaearon我已经开始研究它了。 计划在本周某个时候发布我的发现或 PR。

@gaearon我已经开始研究 SyntheticKeyboardEvent.js。 打算这个周末搞个公关。

@gaearon我也可以参加任何测试,以防最初分配的人员没有时间进行工作。

@gaearon抱歉耽搁了这么久,我现在正在做 WIP PR。 更新:有人可以简要解释一下我应该怎么做才能不依赖私有 API? 另外,我不知道top<EventName> s。 谢谢。

https://github.com/facebook/react/blob/92b7b172cce9958b846844f0b46fd7bbd8c5140d/packages/react-dom/src/events/__tests__/SelectEventPlugin-test.js > extract函数

@gaearon很抱歉耽搁了这么久😅。 我今天会处理这个问题,如果我对此有任何疑问,我会联系你。

@morajabi解决此问题的一种潜在方法

  • 查看SelectEventPlugin并了解它为用户提供了哪些功能
  • 编写利用该功能的代码
  • 禁用加载SelectEventPlugin (注释掉),看看有什么问题(确保有问题)
  • 您编写的代码现在是您的测试的第一个版本,因此您可以将其放入测试用例中
  • 再次启用加载SelectEventPlugin并确保测试通过
  • 优化你的代码

@gaearon为延迟道歉
根据您的建议,我确实尝试评论EventPluginRegistry.js的几个部分,发现很多测试用例失败( SyntheticWheelEventReactDOMComponentTreeSyntheticClipboardEventSyntheticWheelEvent , inputValueTracking , SimpleEventPlugin , ChangeEventPlugin , ReactDOMComponentTree等),
我猜主要是因为ReactBrowserEventEmitter.js使用registrationNameDependencies ,它在EventPluginRegistry.js中定义

虽然在注释掉的时候

没有一个测试用例失败(只有EventPluginRegistry测试失败)
基于此,我猜EventPluginRegistry已经被其他测试套件覆盖了。

方便的是,我们在 repo 中有它。

我没明白你的意思

还有其他建议我可以使用公共 API 重写EventPluginRegistry吗?

对于其他人(不确定之前是否已经播放过),我发现@kentcdodds视频播客- Ben Alpert 的反应事件代码演练非常有用。

抱歉@gaearon我试着做,但现在我没有空闲时间来完成它
因此,如果其他人想解决我的问题,请随意:)

@danilowoz @gaearon如果你不介意我可以使用 BeforeInputEventPlugin-test.js。

@timjacobi ReactDOMComponentTree.getInstanceFromNode的替代品是什么?

另外,我应该在哪里禁用它?

禁用加载 SelectEventPlugin(将其注释掉)并查看中断(确保出现中断)

@morajabi我不确定您是否在正确的水平上解决了这个问题。 你能用你目前拥有的东西打开一个 WIP PR 吗? 我不想过多地污染这个线程。

@timjacobi当我没有提交任何新内容时,我不能。 对不起,如果有人可以拿SelectEventPlugin-test ,这些天我很忙。

似乎我们不再需要ReactDOMServerIntegration-test (cc @minerado),因为我已经将它与其他更改一起介绍了。

@aqumus根据您的分析,我将从该列表中删除EventPluginRegistry-test.js 。 我认为我们将把它作为那些特定内部的单元测试,但很高兴知道其他测试涵盖了实际逻辑。

@king0120我将把getEventCharCode-test重新分配给@aarboleda1 ,因为他正在https://github.com/facebook/react/pull/11631中进行一项非常相关的测试,一起做可能会更容易。

@morajabi @gaearon我也可以看看 SelectEventPlugin-test.js。

@email2vimalraj仅供参考,我重写了inputValueTracking-test

这些测试目前没有所有者:

  • [ ] getNodeForCharacterOffset-test.js (3/5)@accordeiro 拍摄
  • [ ] ReactBrowserEventEmitter-test.js (5/5)由@madeinfree 拍摄
  • [ ] BeforeInputEventPlugin-test.js + FallbackCompositionState-test.js (5/5,应合并)@GordyD 拍摄
  • [x] SelectEventPlugin-test (2/5) 由@skiritsis 拍摄
  • [x] ReactTreeTraversal-test.js (4/5) 由@timjacobi 拍摄

我根据我对他们难度的看法对他们进行了分类。

我们与@timjacobi @kwnccc @skiritsis有一个队列,所以请你们三个让我们知道您是否愿意参加这些测试中的任何一个(请指定哪一个)。 你也可以通过,我们让其他人试试。

请注意,这些变得非常复杂,因此它们并不完全适合初学者。 它们不是机械替代品; 您需要了解测试试图验证的内容,然后提出等效的公共 API 测试(可能看起来非常不同)。

要接受这些,您应该能够轻松地自己研究事物,类似于@GordyDhttps://github.com/facebook/react/pull/11383 中所做的事情。 事实上,如果@GordyD想拿走这些,我很乐意给他一个!

@skiritsis既然您感兴趣,我会重新分配SelectEventPlugin-test给您。

我想在 ReactBrowerEventEmitter-test.js 上工作💪

@gaearon :谢谢你,抱歉没有及时回复。 忙于其他工作。 我会研究你如何重写我的理解。

我可以看看ReactTreeTraversal-test.internal.js

@madeinfree让我们给@kwnccc几天时间先回复,因为他已经在队列中。 如果他不感兴趣,我稍后分配给你。

@gaearon好的! 明白了,谢谢~

@gaearon如果没有其他接受者,我将看看结合BeforeInputEventPlugin + FallbackCompositionState

听起来不错,谢谢@GordyD!

顺便说一句,这里还有一些经过转换的事件测试,让您了解这段代码通常最终会是什么样子: https ://github.com/facebook/react/pull/11631 https://github。 com/facebook/react/pull/11525

@gaearon如果没有其他人想要,我也很乐意接受ReactBrowserEventEmitter-test.js

@madeinfree

你还对ReactBrowerEventEmitter感兴趣吗? 如果是这样,请接受并让我们更新!

@gaearon好的! 我愿意接受。

你说对了。

有人想拿剩下的getNodeForCharacterOffset-test吗?

我可以帮忙解决这个问题( getNodeForCharacterOffset-test ):)

@gaearon还没有时间像我想的那样潜入ReactIncrementalPerf-test.js 。 很抱歉坚持了这么久,但如果有人想要它,那就可以抢购了!

@accordeiro你明白了!

@gaearon真的很抱歉,没有收到通知。 如果还有一些测试需要处理,请告诉我。 我希望留下一些容易开始的东西。

@kwnccc想看看ReactIncrementalPerf-test.js吗?

我可以查看ReactIncrementalPerf-test.js吗? 或者如果需要,我可以帮助@kwnccc 为其编写测试
我没有看到任何名为ReactIncrementalPerf.js的文件,所以我们必须为ReactPortal.js编写测试吗?

如果我稍微理解了ReactIncrementalPerf-test.js中的问题(如果我错了,请纠正我),这意味着我需要从 ReactPortal.createPortal(...) 切换到像 react-dom 这样的公共 API 和 ReactDOM .createPortal(...) ? @gaearon

@gaearon我真的很想试试ReactIncrementalPerf-test.js 。 自从@abiduzz420开始检查它,如果需要,我们甚至可以组队。

是的,当然@kwnccc我很高兴与您合作。 你排在我前面,所以都是你的!

@kwnccc我在运行yarn flow时遇到一个测试错误yarn test和 Flow 错误。 我会将代码推送到我的分叉仓库: https ://github.com/abiduzz420/react 以便您也可以继续工作

 FAIL  packages\react-reconciler\src\__tests__\ReactIncrementalPerf-test.internal.js (11.191s)
  ● ReactDebugFiberPerf › supports portals

    Invariant Violation: Target container is not a DOM element.

      at invariant (node_modules/fbjs/lib/invariant.js:42:15)
      at Object.createPortal (packages/react-dom/src/client/ReactDOM.js:1112:70)
      at Object.<anonymous> (packages/react-reconciler/src/__tests__/ReactIncrementalPerf-test.internal.js:510:116)
$ yarn flow
yarn run v1.3.2
$ node ./scripts/tasks/flow.js
Error: packages/react-reconciler/src/ReactFiberHostContext.js:87
 87:     const nextContext = getChildHostContext(context, fiber.type, rootInstance);
                                                 ^^^^^^^ NoContextT. This type is incompatible with the expected param type of
                    v---------------------------------------------
 31: export default function<T, P, I, TI, HI, PI, C, CC, CX, PL>(
 32:   config: HostConfig<T, P, I, TI, HI, PI, C, CC, CX, PL>,
 33: ): HostContext<C, CX> {
     --------------------^ some incompatible instantiation of `CX`

Error: packages/react-reconciler/src/ReactFiberHostContext.js:87
 87:     const nextContext = getChildHostContext(context, fiber.type, rootInstance);
                                                                      ^^^^^^^^^^^^ NoContextT. This type is incompatible with the expected param type of
                    v---------------------------------------------
 31: export default function<T, P, I, TI, HI, PI, C, CC, CX, PL>(
 32:   config: HostConfig<T, P, I, TI, HI, PI, C, CC, CX, PL>,
 33: ): HostContext<C, CX> {
     --------------------^ some incompatible instantiation of `C`
Found 2 errors
Flow failed
error Command failed with exit code 2.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

@abiduzz420流量问题是 Windows 上的一个已知问题。 这是无关的(但我们需要弄清楚它为什么会发生)。 请参阅https://github.com/facebook/react/issues/11703。

@kwnccc至于ReactIncrementalPerf-test ,是的,这需要一些思考。 我认为也许此时最好暂时将ReactPortal移动到shared 。 然后让ReactNoop提供它自己的createPortal()方法(就像ReactDOM一样)。

@gaearon我已将 ReactPortal 移至共享目录,并且所有测试都通过了。 在为ReactNoop实施我自己的方法createPortal()时需要一些帮助。 从createPortal()是如何写成ReactDOM中获取灵感,我将返回ReactPortal.createPortal(children,container,null,key)
我在考虑这些方面:

function createPortal( children: ReactNodeList, container: Container, key: ?string = null) {
invariant( 
// TODO: Need to figure out this part of the code
);
return ReactPortal.createPortal(children, container, null, key);
}

请让我知道我做得对吗?

@gaearon我的代码仍然是一个wip。 但我想仔细检查我是否走在正确的轨道上。 如果您可以快速查看我的代码并澄清一些疑问,那真的会对我有所帮助:

  1. 我采取的方法是否正确?
  2. 我假设测试需要涵盖在现有测试中测试的所有标签和场景
    测试以保持测试覆盖率。 我不确定是否有办法使用这些特殊和格式化标签动态生成组件。 你能给我一些关于实现这一目标的有效方法的建议吗?
  3. 我不确定如何使用公共 API 测试“任何标签无上下文”测试的“无上下文”部分,因为方法 isTagValidInContext() 不用于除测试文件之外的任何其他地方。 有任何想法吗?

@abiduzz420是的,这听起来不错

@anushreesubramani

我采取的方法是否正确?

一般来说,是的,但我们希望避免在那里重复。 理想情况下,它应该从一系列

expect(isTagStackValid(['a', 'a'])).toBe(false);

对一系列

expectInvalidNestingWarning(true, ['a', 'a']);

其中expectInvalidNestingWarning是一个自定义函数,它生成组件,然后断言渲染它会产生警告。

我不确定是否有办法使用这些特殊和格式化标签动态生成组件。 你能给我一些关于实现这一目标的有效方法的建议吗?

是的,我在想这样的事情:

function expectInvalidNestingWarning(shouldWarn, tags) {
  let element = null;
  tags = [...tags];
  while (tags.length) {
    element = React.createElement(tags.pop(), null, element);
  }
  const container = document.createElement('div');
  ReactDOM.render(element, container);
  // assert either a warning or lack of one based on shouldWarn
}

我们遍历数组,取出最后一项,并将当前元素包装到具有相应标签的父元素中。 这样到最后我们就得到了相应的树。 我可能写错了什么,但这是一般的想法。

您可能还想放一些类似的东西

jest.resetModules();
React = require('react');
ReactDOM = require('react-dom');

在渲染之前的那个函数中,因为否则警告可以被删除重复并且我们不能可靠地测试它们。

我不确定如何使用公共 API 测试“任何标签无上下文”测试的“无上下文”部分,因为方法 isTagValidInContext() 不用于除测试文件之外的任何其他地方

查看责备,它被添加到https://github.com/facebook/react/commit/76bb96ef21b7c665e1b51b6bb90e64ec40c0f16a并且在那时它也在测试之外被调用。 但在未来的某个时候,它不再被使用。 测试提到服务器渲染:

https://github.com/facebook/react/blob/8cbc16f0faedafe4f7424b286af52dafd7a79587/packages/react-dom/src/__tests__/validateDOMNesting-test.internal.js#L144 -L145

但是此功能也不再与服务器渲染一起使用。

从这个评论中,我了解到我们的目标是确保我们在不认识祖先时永远不会发出警告。 但是,我找不到将null作为ancestorInfo传递给validateDOMNesting的代码路径。 因此,我们可能总是知道当前版本中的祖先。 所以我会说完全删除这个测试是安全的。

@gaearon我已经在ReactNoop.js中创建了createPortal()的方法,在此之前我还按照您的建议将ReactPortal.js文件转移到了共享目录。 请仔细阅读我的代码,如果我需要做任何修改或进一步添加,我会做的。

请问可以发个PR吗? 在评论中讨论更容易。

@abiduzz420你似乎做得很好,对不起,但在今天之前我没有时间开始工作! 真的很高兴你能够完成测试! 👏👏
@gaearon接下来,我会确保我有一个很好的可用性

@gaearon快速更新:我已经开始重构/组合BeforeInputEventPlugin + FallbackCompositionState测试。 我已经很好地掌握了如何通过公共 API 测试实现。 我现在正在创建测试用例,以根据不同的执行环境/浏览器引擎来练习不同的代码路径。 我希望在本周末之前进行第一次 PR(到 12 月 10 日——更新我需要更多时间——看 12 月 12 日)。

不错,谢谢更新!

@gaearon我这边的快速更新:我已经开始为getNodeForCharacterOffset-test重写测试并且应该能够将 PR 推送到星期四——这样可以吗?

听起来不错

再下一个! https://github.com/facebook/react/pull/11742

@reznord我们还没有收到你的消息——你有什么开始吗? 如果你太忙,也许最好给别人一个尝试的机会。

@reznord

@gaearon ,我的第一次捐款可以拿ReactErrorUtils-test.js吗?

嗨, @gaearon有什么我可以用ReactErrorUtils-test.js做的吗

嗨,有人可以帮我继续 ReactBrowserEventEmitter-test.js 测试吗? 因为工作忙,没时间继续,PR https://github.com/facebook/react/pull/11713 ,非常感谢!!

再次感谢大家! 还有一些出色的测试,但我认为我们可以关闭它。

@gaearonReactErrorUtils-test.js我想继续努力。 你能确认我能不能把它捡起来吗?

此页面是否有帮助?
0 / 5 - 0 等级