簡體   English   中英

如何監視從 Jest 中的模擬返回的 object function?

[英]How to spy on an object function returned from a mock in Jest?

在我的應用程序中,我有類似的東西來signOutUser一個用戶。

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

而且我想確保調用signOut的 signOut function 。

但是我不知道如何模擬和監視身份驗證 object 上的注銷 function。

我做過的一次嘗試...

我是 mocking 這些來自 firebase firebase/auth的功能就像這樣......

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

我得到ReferenceError: Cannot access 'mockSignOut' before initialization

如果我將其更改為var我得到TypeError: signOut is not a function

我認為這有點接近我想要的文檔? 但這並沒有解釋你將如何模擬我至少理解的模擬值https://jestjs.io/docs/es6-class-mocks#manual-mock

我如何從getAuth()返回並被嘲笑的 object 中監視這個signOut function?

Jest 會自動將jest.mock調用提升到模塊頂部(在任何導入之前)。 這意味着jest.mock將在變量聲明之前被調用。 這就是你得到錯誤的原因。

在您的情況下,您不需要為jest.mock提供模擬工廠 function。 讓這個笑話自動為firebase/auth創建模擬。 這意味着從 firebase firebase/auth模塊導出的函數( getAuth )將被模擬。

然后,您應該為getAuth function 提供一個模擬實現。

例如

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);
  });
});

測試結果:

 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM