在React中,如何在单元测试中实例化没有构造函数的类



我使用的是React 16.13.0。我有下面的类(任务.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);
});
});
});

然而,在使用"hpm测试"运行我的测试时,我得到了这个错误

TypeError: _Missions.Missions is not a constructor

在线

const obj = new Missions()

如何在测试中实例化类?

问题是导出的是Missions类的实例,而不是类本身,并且不能再次实例化实例。所以只导出类,然后在你想使用它的地方实例化它

export default Missions;

将其实例化到您想要使用的位置:

const missions = new Missions();

此外,默认导出是在没有花括号的情况下导入的,所以这样做:

import Missions from './Missions';

最新更新