[]' 缺少类型“Promise<Cats[]>”中的以下属性:then、catch、[Symbol.toStringTag]、最后 ts(2739)

问题描述 投票:0回答:2

我是打字稿和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);
  });
})
});
typescript jestjs nestjs
2个回答
13
投票

您正在返回一个数组,但您的函数是

async
,这意味着它应该返回数组的 Promise。有两种方法可以解决这个问题。

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

两者都做同样的事情,所以选择是你的,但第一个肯定更容易阅读。

^ 正如 VLAZ 所指出的,这可以是任何返回承诺的东西,包括使用

mockImplementation(async () => result)
mockImplementation(() => Promise.resolve(result))


0
投票

类型“Response>”缺少类型“Promise”中的以下属性:then、catch、finally、[Symbol.toStringTag]ts(2739)

© www.soinside.com 2019 - 2024. All rights reserved.