Node.js 使用Jest模拟节点klaviyo模块
我正在我的应用程序上使用节点klaviyo模块,并创建了测试用例来断言快照。下面是我的代码:Node.js 使用Jest模拟节点klaviyo模块,node.js,jestjs,Node.js,Jestjs,我正在我的应用程序上使用节点klaviyo模块,并创建了测试用例来断言快照。下面是我的代码: const klaviyoProfile = await klaviyoClient.profiles.getProfileIdByEmail(profileEmail); if(!klaviyoProfile || !klaviyoProfile.profileId){ return; } const result = await klaviyoClient.profiles.updateProf
const klaviyoProfile = await klaviyoClient.profiles.getProfileIdByEmail(profileEmail);
if(!klaviyoProfile || !klaviyoProfile.profileId){
return;
}
const result = await klaviyoClient.profiles.updateProfile({
profileId: profileEmail,
properties: {
userId: data.userId
}
});
(为了简洁起见,我删除了其他代码,只放在实现中。)
它只是首先获取给定概要文件的概要文件,然后使用概要文件id更新属性
但是,我下面的测试用例无法断言mockUpdateProfile的模拟调用。但有趣的是,如果我去掉这一行:
const klaviyoProfile = await klaviyoClient.profiles.getProfileIdByEmail(profileEmail);
测试用例通过了
import { handler } from '../index';
const mockUpdateProfile = jest.fn().mockImplementation(()=> { return true });
const mockGetProfileIdByEmail = jest.fn().mockImplementation(()=> { return { profileId: 'fake_id' }});
const mockProfiles = {
updateProfile: mockUpdateProfile,
getProfileIdByEmail: mockGetProfileIdByEmail
};
jest.mock('node-klaviyo', ()=> {
return jest.fn().mockImplementation(()=> {
return { profiles: mockProfiles }
})
});
const klaviyoMessage = {
profileProperty: 'something@gmail.com',
data: {
userId: 'something'
}
};
describe('Klaviyo', ()=> {
describe('Valid Request', ()=> {
test('should update the klaviyo profile', async()=> {
await handler({
Records: [
{
body: JSON.stringify(klaviyoMessage),
}
]
}, {});
expect(mockUpdateProfile.mock.calls[0]).toMatchSnapshot('add-update-klaviyo-profile');
});
})
});
我在调试时注意到,当执行上述代码行时,代码执行会结束,因此对mockUpdateProfile的模拟调用是未定义的
总之,如果我只从klaviyoClient调用概要文件的updateProfile方法,我会调用updateProfile并通过测试用例,但是如果我在代码中添加GetProfileIDByMail,不知何故它不会让代码完全执行,因此即使我对这两个调用都进行了模拟,也会导致udpateProfile调用的断言失败
想到我在这里错过了什么,我有点困惑。任何帮助或指导都将不胜感激。谢谢