Jest:模拟多次返回键/值对的嵌套函数

5w9g7ksd  于 2022-12-16  发布在  Jest
关注(0)|答案(1)|浏览(172)

我正在为一个API编写一个测试,该API多次调用嵌套API以获取键值对。值将始终为boolean,我尝试在下面的代码中模拟此服务aka KeyValueService。这些和其他更多布尔值在PhotoService中使用,我希望模拟这些值,以便我可以更改测试以匹配这些值。
我已经嘲笑了布尔值,并且两次尝试将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);
  });
rqqzpn5f

rqqzpn5f1#

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

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

使用你想要的。如果需要的话,可以是mockImplementation,也可以是mockReturnValue等等。我的猜测是,它只是为特定的it/test块重新分配了get函数到一个新的模拟值。

相关问题