Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

286
Visualizações
How to spy on an object function returned from a mock in Jest?

In my app I have something similar to this to signOutUser a user.

import { getAuth } from "firebase/auth";
export function signOutUser(): Promise<void> {
  return getAuth(firebaseApp).signOut();
}

And I want to make sure that the signOut function of firebase is called.

But I can't figure how to mock and spy on the sign out function that is on the auth object.

One attempt I've done...

I'm mocking these functions from firebase/auth like so...

const mockSignOut = jest.fn();
jest.mock("firebase/auth", () => {
  return {
    __esModule: true,
    getAuth: jest.fn().mockImplementation(() => {
      return {
        signOut: mockSignOut,
      };
    }),
  };
});

I get ReferenceError: Cannot access 'mockSignOut' before initialization .

If I change it to var I get TypeError: signOut is not a function

The documentation I think this is kind of close to what I want? But it doesn't explain how you would mock a mocked value that I understand at least https://jestjs.io/docs/es6-class-mocks#manual-mock

How can I spy on this signOut function from the object that getAuth() returns and is also mocked?

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Jest will automatically hoist jest.mock calls to the top of the module (before any imports). That means jest.mock will be called before the variable is declared. That's why you got the error.

You don't need to provide the mock factory function for jest.mock in your case. Just let the jest create mock for firebase/auth automatically. That means functions exported(getAuth) from the firebase/auth module will be mocked.

Then, you should provide a mock implementation for the getAuth function.

E.g.

index.ts:

import { getAuth } from 'firebase/auth';
import { initializeApp } from 'firebase/app';

const firebaseApp = initializeApp({});

export function signOutUser(): Promise<void> {
  return getAuth(firebaseApp).signOut();
}

index.test.ts:

import { Auth, getAuth } from 'firebase/auth';
import { signOutUser } from './';

jest.mock('firebase/auth');

describe('70646844', () => {
  test('should pass', async () => {
    const mAuth = ({
      signOut: jest.fn(),
    } as unknown) as Auth;
    (getAuth as jest.MockedFunction<typeof getAuth>).mockReturnValue(mAuth);

    await signOutUser();
    expect(getAuth).toBeCalledTimes(1);
    expect(getAuth().signOut).toBeCalledTimes(1);
    // Better
    // expect(mAuth.signOut).toBeCalledTimes(1);
  });
});

test result:

 PASS  examples/70646844/index.test.ts (10.306 s)
  70646844
    ✓ should pass (2 ms)

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |                   
 index.ts |     100 |      100 |     100 |     100 |                   
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       1 passed, 1 total
Snapshots:   0 total
Time:        10.512 s, estimated 12 s
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda