这是一个很好的贡献机会。
我们需要在公共 API 方面重写更多的单元测试。
这意味着他们只能导入诸如react
、 react-dom
、 react-dom/test-utils
、 react-test-renderer
等 npm 入口点,但不能导入诸如SyntheticEvent
之类的内部模块ReactDOMComponentTree
。 “坏”需求已经在测试中标有 TODO,因此您不会错过它们。
为了帮助解决这个问题:
// TODO: can we express this test with only public API?
。第 3 步需要一些思考。 您可以使用我们之前使用公共 API 重写测试的示例来获取灵感。 例如:
通常,您需要考虑您正在测试的行为如何在 React 应用程序中实际重现,然后对其进行测试。 在极少数情况下,它可能涉及将某些 API 公开,我们需要单独讨论,所以不要犹豫,开始讨论! 如果您不知道如何使用公共 API 重写某些特定测试,请在此处发表评论,我们可以进行头脑风暴。
这是需要更改的测试的完整列表。 其中一些可能是简单的单行更改,有些可能涉及一些重写,有些可能需要从头开始重写。 有些甚至可能是不可能的,但得出这一结论的研究仍然非常有价值,我们很想知道这一点。
试试看,让我们知道:
更新:现在进行所有测试。 如果有人没有时间完成工作,他们可能会在未来腾出时间。
ReactBrowserEventEmitter-test.js
(由@madeinfree拍摄,参见 https://github.com/facebook/react/issues/11299#issuecomment-355188567)getNodeForCharacterOffset-test.js
(由@accordeiro 拍摄)ReactErrorUtils-test.js
(由@reznord 拍摄)BeforeInputEventPlugin-test.js
+ FallbackCompositionState-test.js
(由@GordyD 拍摄)validateDOMNesting-test.js
(由@anushreesubramani 拍摄) https://github.com/facebook/react/pull/11742ReactIncrementalPerf-test.js
(由@dphurley 拍摄)SelectEventPlugin-test.js
(由@skiritsis 拍摄)ReactTreeTraversal-test.js
(由@timjacobi 拍摄)SyntheticKeyboardEvent-test.js
+ getEventCharCode-test.js
(由@aarboleda1 拍摄)escapeTextContentForBrowser-test.js
(由@jeremenichelli 拍摄)inputValueTracking-test.js
quoteAttributeValueForBrowser-test.js
(由@jeremenichelli 拍摄)ReactDOMComponent-test.js
(由@AudyOdi 拍摄)ReactDOMComponentTree-test.js
(由@GordyD 拍摄)ReactDOMEventListener-test.js
(由@enapupe 拍摄)ReactDOMInput-test.js
(由@SadPandaBear 拍摄)ReactDOMServerIntegration-test.js
(由@minerado 拍摄)setInnerHTML-test.js
(由@silvestrijonathan 拍摄)getEventKey-test.js
(由@mjw56 拍摄)SyntheticClipboardEvent-test.js
(由@smaniotto 拍摄)SyntheticEvent-test.js
(由@timjacobi 拍摄)SyntheticWheelEvent-test.js
(由@douglasgimli 拍摄)ChangeEventPlugin-test.js
(由@Ethan-Arrowood 拍摄)EnterLeaveEventPlugin-test.js
(由@accordeiro 拍摄)ReactCoroutine-test.js
(由@jstejada 拍摄)ReactFiberHostContext-test.js
(由@adsonpleal 拍摄)第一次投稿?
不清楚如何修复特定测试?
如果您放弃了某些测试,请将您的发现发表在评论中,以便我们决定下一步该做什么。
我可以在周末看看这个,看看我是否能在短期内解决它。
万分感谢! 如果您选择任何特定的测试,请在线程中使用文件名进行评论,以免其他人开始进行相同的测试。
我绝对有兴趣为此做出贡献。 我将在这个周末浏览并找到重构的机会!
我也有兴趣👍
我在第一篇文章中发布了一个测试列表。 只要让我知道你想带哪些,我会分配给你。
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.js
和ReactFiberHostContext-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-DOM
和dangerouslySetInnerHTML
进行测试,所以我会这样做!
是的,在这种情况下,我可能会将测试重命名为。 在第二天左右寻找我的 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,我可以争取一些时间吗?
听起来不错,当然!
我有同样的问题
另一个 PR 合并了! https://github.com/facebook/react/pull/11316
写了一个关于我如何处理其中一个测试的小分析。 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
的几个部分,发现很多测试用例失败( SyntheticWheelEvent
, ReactDOMComponentTree
, SyntheticClipboardEvent
, SyntheticWheelEvent
, inputValueTracking
, SimpleEventPlugin
, ChangeEventPlugin
, ReactDOMComponentTree
等),
我猜主要是因为ReactBrowserEventEmitter.js
使用registrationNameDependencies
,它在EventPluginRegistry.js
中定义
虽然在注释掉的时候
没有一个测试用例失败(只有EventPluginRegistry
测试失败)
基于此,我猜EventPluginRegistry
已经被其他测试套件覆盖了。
我没明白你的意思
还有其他建议我可以使用公共 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)ReactBrowserEventEmitter-test.js
(5/5)BeforeInputEventPlugin-test.js
+ FallbackCompositionState-test.js
(5/5,应合并)@GordyD 拍摄SelectEventPlugin-test
(2/5) 由@skiritsis 拍摄ReactTreeTraversal-test.js
(4/5) 由@timjacobi 拍摄我根据我对他们难度的看法对他们进行了分类。
我们与@timjacobi @kwnccc @skiritsis有一个队列,所以请你们三个让我们知道您是否愿意参加这些测试中的任何一个(请指定哪一个)。 你也可以通过,我们让其他人试试。
请注意,这些变得非常复杂,因此它们并不完全适合初学者。 它们不是机械替代品; 您需要了解测试试图验证的内容,然后提出等效的公共 API 测试(可能看起来非常不同)。
要接受这些,您应该能够轻松地自己研究事物,类似于@GordyD在https://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。 但我想仔细检查我是否走在正确的轨道上。 如果您可以快速查看我的代码并澄清一些疑问,那真的会对我有所帮助:
@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并且在那时它也在测试之外被调用。 但在未来的某个时候,它不再被使用。 测试提到服务器渲染:
但是此功能也不再与服务器渲染一起使用。
从这个评论中,我了解到我们的目标是确保我们在不认识祖先时永远不会发出警告。 但是,我找不到将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 ,非常感谢!!
再次感谢大家! 还有一些出色的测试,但我认为我们可以关闭它。
@gaearon : ReactErrorUtils-test.js
我想继续努力。 你能确认我能不能把它捡起来吗?
最有用的评论
我们有第一个合并的 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 朝着正确的方向发展可能很有价值。