[]'缺少类型'Promise <Cats []>'中的以下属性:然后,捕获[Symbol.toStringTag],最后是ts(2739)

时间:2020-09-14 05:36:57

标签: typescript jestjs nestjs

我是Typescript和nestjs的新手,我想学习nest js,但是当我尝试对代码进行单元测试时,结果变量给我标题中显示的错误?任何人都可以帮助我在这里找到我在做错什么。

describe('cats', () => {
  let controller: CatsController;
  let service: CatsService;
  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [DeliveryController],
    }).compile();

    controller = module.get<CatsController>(CatsController);
  });
describe('', () => {
  it('should return an array of cats', async () => {
    const result = [
{
id: "1",
name: "Cat",
type: "hybrid"
}
          ];
    jest.spyOn(service, 'getCats').mockImplementation(() => result); //'result' in this line shows error

    expect(await controller.getAllCats()).toBe(result);
  });
})
});

1 个答案:

答案 0 :(得分:1)

您要返回一个数组,但是您的函数是async,这意味着它应该返回该数组的Promise。有两种解决方法。

  1. 使用mockResolvedValue()代替mockImplementation()。这将使Jest兑现您所说的承诺。
  2. 使用mockImplementation(() => new Promise((resolve, reject) => resolve(result)))返回承诺而不是结果。^

这两个都做同样的事情,所以选择是您自己的,但第一个绝对容易阅读。

^如VLAZ所述,这可以是任何返回承诺的内容,包括使用mockImplementation(async () => result)mockImplementation(() => Promise.resolve(result))