Node.js 使用Jest模拟节点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

我正在我的应用程序上使用节点klaviyo模块,并创建了测试用例来断言快照。下面是我的代码:

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调用的断言失败

想到我在这里错过了什么,我有点困惑。任何帮助或指导都将不胜感激。谢谢