Find component by display name when the component is stateless functional, with Enzyme Find component by display name when the component is stateless functional, with Enzyme reactjs reactjs

Find component by display name when the component is stateless functional, with Enzyme


There are a couple of things you can do in this case. Enzyme can match component constructors based on the constructor's static .displayName or .name properties, or by referential equality. As a result, the following approaches should all work:

Direct Reference

you can import the actual components in your tests and find them using direct references to the component:

// NavBar-test.jsimport NavBar from './path/to/NavBar';  ...  wrapper.find(NavBar).length)

Named Function Expressions

If you use named function expressions to create your stateless functional components, the names should still work.

// NavBar.js  module.exports = function NavBar(props) { ... }

Static .displayName property

You can add a static .displayName property on the components:

// NavBar.jsconst NavBar = (props) => { ... };NavBar.displayName = 'NavBar';


Try to import the Hello component in the top of your file and then update your assertion to find the actual component and not the name of it. Like below:

import createApp from './App'import Hello from './Hello'import React from 'react'import test from 'tape'import { shallow } from 'enzyme'test('App component test', (assert) => {  const App = createApp(React)  const wrapper = shallow(<App />)  assert.equal(wrapper.find(Hello).length === 1, true)})

Btw for all the enzyme users out there the assertion would be something like:

expect(wrapper.find(Hello)).toHaveLength(1);