We typically begin with one snapshot test. This roughly checks that our component renders as we expect it to. Afterwards, we need enough tests to comprehensively test the external interface and behavior of our component in isolation. The external interface can include how the user interacts with the component, as well as how the component interacts or triggers external effects.
Enzyme provides the ability to “shallow” render a component — only rendering the content of the tested component and not of any child components. This is useful to test the component as an isolated unit and prevent the behavior of its child components from affecting the test. We should always use shallow rendering in our tests (of course, exceptions apply) as we don’t want one change in a child component to cause a cascading set of test failures unrelated to the change.