В React, как создать экземпляр класса без конструктора в моем модульном тесте? - PullRequest
0 голосов
/ 15 апреля 2020

Я использую React 16.13.0. У меня есть следующий класс (Missions.ts) ...

class Missions {

  repo() : MissionRepository {
    return getRepository(Mission) as MissionRepository;
  }

  async getAll() : Promise<Mission[]>  {
    return this.repo().find();
  }
    ...
  async removeVolunteerFromMission(missionId: string) {
    const missions = this.repo();
    const mission = await missions.findById(missionId);
    mission.volunteerId = '';
    mission.status = MissionStatus.unassigned;
    return missions.update(mission);
  }
  ...
}

export default new Missions();

Я пытаюсь написать несколько модульных тестов для методов, но мне сложно понять, как создать экземпляр моего класса. Я попробовал следующее ...

import React from "react";
import { CustomRepository, getRepository } from 'fireorm';
import { BaseRepository } from './BaseRepository'
import { Mission } from './schema';
import { Missions } from './Missions';

describe('Missions', () => {
  describe('#removeVolunteerFromMission', () => {
    const missionId = "1234";
    const mission = new Mission();

    beforeEach(() => {
      const mockFindById = jest.fn();
      BaseRepository.prototype.findById = mockFindById;
      mockFindById.mockReturnValue(Promise.resolve(mission));

      const mockUpdate = jest.fn();
      BaseRepository.prototype.update = mockUpdate;
      mockUpdate.mockReturnValue(Promise.resolve(mission));
    });

    it('unassigns volunteer', () => {
      const obj = new Missions();
      obj.removeVolunteerFromMission(missionId)
      expect(mockFindById).toHaveBeenCalledTimes(1);
      expect(mockUpdate).toHaveBeenCalledTimes(1);
      expect(mission.volunteer).toBe(null);
    });
  });
});

Однако после запуска моего теста с использованием "теста в минуту" я получаю эту ошибку

TypeError: _Missions.Missions is not a constructor

в строке

const obj = new Missions()

Как создать экземпляр класса в тесте?

1 Ответ

0 голосов
/ 15 апреля 2020

Проблема в том, что вы экспортируете экземпляр класса Missions, а не сам класс, и вы не можете создать экземпляр еще раз. Поэтому экспортируйте только класс, а затем создайте его экземпляр там, где вы хотите его использовать.

export default Missions;

Создайте экземпляр там, где вы хотите его использовать:

const missions = new Missions();

Также экспорт по умолчанию импортируется без фигурные скобки, вот так:

import Missions from './Missions';
...