typescript - [] saknar följande egenskaper från typen 'Promise': then, catch, [Symbol.toStringTag], finally ts(2739)
Jag är ny på TypeScript och NestJS och jag försöker lära mig NestJS, men när jag försöker enhetstesta min kod så ger variabeln result mig ett fel som visas i titeln. Kan någon hjälpa mig att försöka hitta vad jag gör fel här.
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);
});
})
});
Svar #1
Du returnerar en array, men din funktion är async, vilket betyder att den bör returnera ett Promise av arrayen. Det finns två sätt du kan gå tillväga på.
- använd
mockResolvedValue()istället förmockImplementation(). Detta kommer få Jest att returnera ett löfte om vad du säger åt det. - använd
mockImplementation(() => new Promise((resolve, reject) => resolve(result)))för att returnera ett löfte istället för resultatet.^
Båda dessa gör samma sak, så valet är ditt, men den första är definitivt lättare att läsa.
^som noterat av VLAZ, kan detta vara vad som helst som returnerar ett löfte, inklusive att använda mockImplementation(async() => result) eller mockImplementation(() => Promise.resolve(result))