0

In my app I use the navigator object to store a string in the clipboard:

navigator.clipboard.writeText('string')

But when I write my test in Jest and mock this object I get the error:

Cannot read property 'writeText' of undefined

This is how I mock navigator in my test file:

//  Mock clipboard object
const clipboardWriteTextSpy = jest.fn()
navigator = {
  clipboard: {
    writeText: clipboardWriteTextSpy
  }
}

Update

I also tried using global.navigator but I still have the error:

global.navigator = {
  clipboard: {
    writeText: clipboardWriteTextSpy
  }
}

Has someone an idea how to mock this object?

johannchopin
  • 11,813
  • 8
  • 41
  • 91
  • Does this answer your question? [Mocking globals in Jest](https://stackoverflow.com/questions/40449434/mocking-globals-in-jest) – Dimitri L. Aug 09 '20 at 17:44

1 Answers1

0

The easiest way to mock non-application logic (like browser's navigator) is to write a function as part of your application and mock it. Example:

// clipboard.js

export const setClipboard = (text) => navigator.clipboard.writeText('string');

Then mock it in your test:

// some.test.js

import { setClipboard } from './clipboard';

jest.mock('./clipboard');
Dimitri L.
  • 3,894
  • 1
  • 14
  • 17