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!