[英]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.