Vitest,如何模拟函数依赖关系



我正在尝试模拟依赖关系fngetUser&这个片段的createAndReturnUser没有任何成功:

passport.js

const {getUser, createAndReturnUser} = require('../../../../db/queries');
const verifyCallback = async (accessToken, refreshToken, profile, cb) => {
// Check if user exists (Find or Create)
try {
const responseUser = await getUser(profile.id, profile.provider);
console.log('Response user',responseUser);
if (responseUser) {
return cb(null, responseUser);
} else {
const newUser = await createAndReturnUser(
profile.id,
profile.displayName,
profile.name.givenName,
profile.name.middleName,
profile.name.familyName,
profile.emails[0].value,
profile.photos[0].value,
profile.provider,
accessToken,
refreshToken
)
return cb(null, newUser);
}
} catch (err) {
return cb(err);
}
}

passport.test.js

import { describe, expect, it, vi } from 'vitest';
import queries from '../../db/queries';
vi.mock('../../db/queries');
describe('verifyCallback() functionality', () => {
it('should verify an existing user', async () => {
const accessToken = '1234';
const refreshToken = '1234';
const profile = {
id: '12345',
displayName: 'Fake Tech Exec',
name: {
givenName: 'Fake',
middleName: 'Tech',
familyName: 'Exec'
},
emails: [{ value: 'faketech@test.com' }],
photos: [{ value: 'https:faketechexec.jpg' }],
provider: 'facebook',
};
const cb = vi.fn();
const user = {
id: '12345',
displayName: 'fakeTechExec',
firstName: 'fake',
middleName: 'Tech',
lastName: 'Exec',
profilePicture: 'faketechexec.jpg'
}
queries.getUser.mockResolvedValue(user)
await verifyCallback(accessToken, refreshToken, profile, cb);
expect(cb).toBeCalled();
expect(cb).toBeCalledWith(null, user);
});
});

我一直在遵循本指南,但没有取得任何成功:https://www.strv.com/blog/quickest-simplest-way-mocking-module-dependencies-jest-engineering

不幸的是,我的测试失败了,在这个过程中调用了我的getUser,抛出了一个丑陋的错误。我可能错过了一些非常简单的东西,但是,我几周前才开始学习vitest

关于如何测试我的函数依赖性,有什么建议吗?

TLDR:Vitest与require()不兼容,它只适用于import

我只对jest有经验,但在检查了文档后,我认为你可以在文件/测试开始时用这个来模拟getUser

vi.mock('../../db/queries', () => {
const user = {
id: '12345',
displayName: 'fakeTechExec',
firstName: 'fake',
middleName: 'Tech',
lastName: 'Exec',
profilePicture: 'faketechexec.jpg'
}
const getUser = vi.fn();
getUser.mockResolvedValue(user);
return {
getUser
}
})

只需记住在afterEach中调用vi.restoreAllMocks()即可。

最新更新