我有一个关于react-testing-library的问题。如果您正在进行钩子开发,似乎这是转到测试库,因为Enzyme目前似乎不支持钩子,并且至少从浅层渲染的角度来看,谁知道它是否会……至少从我的角度出发目前已经阅读。因此,令我对react-testing-library感到有些疯狂的是,它建议您进行完整的渲染,触发单击,更改等以测试组件。那么,如果您要更改Button组件的功能,该怎么办?使用该组件的所有测试都将中断吗?在已经对该组件的每个子组件进行测试时,对它进行渲染和运行测试似乎并不奇怪吗?您是否应该在父组件中模拟所有这些组件?如果您已经在自动化测试(例如,使用webdriver)中进行点击和更改,那么这样做似乎并不多余吗?
答案 0 :(得分:0)
这个想法是您在端到端测试中测试“关键任务”。 这些测试依赖于所有共同起作用的功能。 整个APP正在运行,并且介于两者之间的每个功能都在工作。 因为它们依赖太多东西,并且花费很长时间来开发和运行,所以您不想通过端到端测试来测试所有东西。
如果断裂,它在哪里断裂?哪个功能不再起作用?
如果您更改了用于端到端测试的按钮的功能,它将失败-应当如此。但是说端到端测试失败了,并且您在按钮上的集成/单元测试也失败了吗?您马上就知道问题出在哪里。
如果重构按钮以使它仍能发挥相同功能,但是实现此功能的代码更加简洁,该怎么办?然后,您应该设计测试,使其仍然通过,这实际上是React-Testing-Library真正发挥作用的地方。 您将模仿用途与组件的交互方式以及组件的预期功能,而不是像酶中那样内部状态。
虽然我不是专业开发人员,但这是我的两分钱。
答案 1 :(得分:0)
您必须看看@kentcdodds谈论的“测试奖杯”哲学。 -https://testingjavascript.com/
就像迈克尔在另一个答案中提到的那样,如果您更改Button组件的功能,则预期测试会失败。测试是业务需求的清晰翻译,因此,如果需求发生变化,则应该破坏您现有的测试,以便可以合并新的测试。
在您进行自动化测试时,我假设您的意思是“端到端测试”。这与react-testing-library
建议您进行的测试不同。该原理要求您在父组件上编写大量集成测试,以便可以确保父组件使用子组件的方式协调一致。它会验证您在子组件上进行的配置,这些配置非常特定于此父组件的行为,因此将进行集成测试。