How to solve 'BroadcastChannel is not defined'

akinncar

Akinn Rosa

Posted on June 14, 2021

How to solve 'BroadcastChannel is not defined'

When using BroadcastChannel with React in your application, you probably will face with this issue if try to run some tests with React Testing Library and Jest:

    ReferenceError: BroadcastChannel is not defined

      51 |
      52 |   useEffect(() => {
    > 53 |     authChannel = new BroadcastChannel('auth')
         |     ^

Enter fullscreen mode Exit fullscreen mode

To resolve this, I tried to mock BroadcastChannel creating a broadcast.ts file inside __mocks__ folder with this content:

jest.mock('BroadcastChannel')
Enter fullscreen mode Exit fullscreen mode

Now, you probably will face with this issue:

    Cannot find module 'BroadcastChannel' from 'src/__mocks__/broadcast.ts'

    Require stack:
      src/__mocks__/broadcast.ts

    > 1 | jest.mock('BroadcastChannel')
        | ^
      2 |

Enter fullscreen mode Exit fullscreen mode

Jest can't find BroadcastChannel because is not a module, then, it is necessary install BroadcastChannel module (this helps your tests and help old browsers support).

yarn add broadcast-channel
Enter fullscreen mode Exit fullscreen mode

Then, import BroadcastChannel where you are using (just add import, your code should be the same).

import { BroadcastChannel } from 'broadcast-channel'
Enter fullscreen mode Exit fullscreen mode

In the last step, you need to change you mock file that you created at start to mock broadcast-channel module:

jest.mock('broadcast-channel')
Enter fullscreen mode Exit fullscreen mode

That's It! 🎉

Now your tests should pass and you can work with jest using BroadcastChannel perfectly.

💖 💪 🙅 🚩
akinncar
Akinn Rosa

Posted on June 14, 2021

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related

What was your win this week?
weeklyretro What was your win this week?

November 29, 2024

Where GitOps Meets ClickOps
devops Where GitOps Meets ClickOps

November 29, 2024