I'm trying to learn how to unit test for a particular task. Here are some of my files:
//examples.service.ts
export class ExamplesService {
constructor(
@InjectModel(Example.name) private ExampleModel: Model<Example>,
private readonly someService: SomeService,
private readonly someOtherService: SomeOtherService
){}
async findAll(): Promise<Example[]> {
return this.exampleModel.find().exec();
}
//... other class methods
}
//examples.controller.ts
@Controller('examples')
export class ExamplesController {
constructor(private readonly examplesService: ExamplesService) {}
@Get()
async findAll(): Promise<Example[]> {
return this.examplesService.findAll();
}
//...
How can i test the functions in examples.service.ts, if it requires me to create a new ExamplesService object that also needs SomeService and SomeOtherService params? Do I create a mock of all of these objects? If so, how?
This is what I have so far:
//examples.controller.spec.ts
jest.mock('./examples.service');
describe(ExamplesController, ()=> {
let examplesController: ExamplesController;
let examplesService: ExamplesService;
beforeEach(async () => {
const module = TestingModule = await Test.createTestingModule({
controllers: [ExamplesController],
providers: [ExamplesService],
}).compile();
examplesController = module.get<ExamplesController>(ExamplesController)
examplesService = module.get<ExamplesService>(ExamplesService)
})
describe('findAll', () => {
it('should return all the examples', async () => {
let examples = await examplesService.findAll();
expect(examples).resolves.toEqual('some result');
})
});
})
However, when testing findAll, it is unsuccessful because examples always equals to undefined.
Thank you!