Home > Mobile >  Unit test say that cannot read property 'map' of undefined
Unit test say that cannot read property 'map' of undefined

Time:02-02

I'm trying to run a unity test on a method by mocking an addressList but it says that it cannot read the property of undefined.

The method:

  async paginate(
    user: User,
    options: IPaginationOptions,
  ): Promise<Pagination<AddressResponse>> {
    const pagination = await this.addressRepository.paginate(user, options);

    return new Pagination(
      await Promise.all(
        pagination.items.map(async (address) => new AddressResponse(address)),
      ),
      pagination.meta,
      pagination.links,
    );
  }

The problem is, when I put a console.log() to read the variable "pagination" it shows me an array that is not empty on the concole:

console.log
    addressList:  [ Address {} ]

this is what the repository is returning to me.

The test that I'm trying to run is this one:

  describe('AddressService', () => {
  let addressService: AddressService;
  const user = new User();
  const addressList: Address[] = [new Address()];

  console.log('addressList: ', addressList);

  beforeEach(async () => {
    const module: TestingModule = await Test.createTestingModule({
      providers: [
        AddressService,
        {
          provide: getRepositoryToken(AddressRepository),
          useValue: {
            paginate: jest.fn().mockResolvedValue(addressList),
            create: jest.fn(),
            save: jest.fn(),
            findById: jest.fn(),
            findOne: jest.fn(),
            update: jest.fn(),
            delete: jest.fn(),
          },
        },
      ],
    }).compile();

    addressService = module.get<AddressService>(AddressService);
  });

  it('should be defined', () => {
    expect(addressService).toBeDefined();
  });

  describe('paginate', () => {
    it('should return an address list successfully', async () => {
      // Act
      const result = await addressService.paginate(user, {
        page: 1,
        limit: 10,
      });

      // Assert
      expect(result).toEqual(addressList);
    });
  });
});

What is the issue with my code? I'm trying to fix this by days.

CodePudding user response:

Your paginate variable is indeed defined and populated, but the property you first accecss in the code is not. You try to access paginate.items while your mock just returns an array of Address. Change your paginate mock to be paginate: jest.fn().mockResolvedValue({ items: addressList }) and it should be fixed

  • Related