【问题标题】:Jest: Mock a nested function which returns key/value pairs multiple times开玩笑:模拟一个多次返回键/值对的嵌套函数
【发布时间】:2022-12-10 03:41:18
【问题描述】:

我正在为一个多次调用嵌套 api 以获取键值对的 API 编写测试。该值将始终为 boolean,我试图在下面的代码中模拟此服务,又名 KeyValueServicePhotoService 中使用了这些和其他更多布尔值,我想模拟这些值,以便我可以更改测试以匹配这些值。

我嘲笑了布尔值,还尝试将 mockResolveValuetwice 设置为 true 两次,认为它可以将 true 应用于变量 valueAvalueB,但它没有用。我将多次使用此嵌套服务,而不仅仅是两次。到目前为止,没有任何解决方案奏效。如何为每个键值对获得所需的值? TIA!

jest.mock('../../service/keyValue.service', () => ({
  valueA: false,
  valueB: false
}));

describe('PhotosService', () => {
  let service: PhotosService;
  let keyValueService: KeyValueService;
  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [PhotosService],
    }).compile();
    
    service = module.get<PhotosService>(PhotosService);
    keyValueService.get.mockResolveValue(() => true);
  });

  it('should be defined', () => {
    expect(service).toBeDefined();
    valueA.mockResolveValue(() => true);
  });
});

但价值观不会改变。我还尝试了以下,

  it('should be defined', () => {
    keyValueService.get.mockResolveValue(true);
    keyValueService.get.mockResolveValue(true);
    expect(service).toBeDefined();
    valueA.mockResolveValue(() => true);
  });

【问题讨论】:

  • 首先,值和值变量的类型是什么?
  • 它的类型boolean
  • 您的 PhotosService 如何使用您的 KeyValueService?它是您的 PhotosModule 中的 provider 吗?
  • 将其视为PhotoService 中的另一个提供商。

标签: jestjs mocking nestjs ts-jest jest-mock-extended


【解决方案1】:

好吧,对我有用的一件事是在我的testit 块中再次将keyValueService.get 设置为jest.fn(),这对我来说解决了这个问题。

keyValueService.get = jest.fn()...;

最多使用你想要的。 mockImplementation(如果需要)或mockReturnValue等。我的猜测是它只是将get函数重新分配给特定it/test块的新模拟值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 2018-08-17
    • 2018-10-23
    • 2022-06-28
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    相关资源
    最近更新 更多