-
Notifications
You must be signed in to change notification settings - Fork 63
Open
Description
The following test does'nt work because of instanceof
operator
import { mock } from 'jest-mock-extended';
import { Repository } from 'typeorm';
import { Article } from '../entities/article.entity';
test('should be an instance of repository', () => {
const mockRepository = mock<Repository<Article>>();
expect(mockRepository instanceof Repository).toBe(true);
mockRepository.findOne.mockResolvedValueOnce(new Article());
await expect(mockRepository.findOne('a832e632-0335-4191-8469-4d849bbb72be')).resolves.toBeInstanceOf(Article);
})
I tried to create an instance of Repository
and then override the properties with mock
, it doesn't work
import { mock, MockProxy } from 'jest-mock-extended';
import { Repository } from 'typeorm';
import { Article } from '../entities/article.entity';
test('should be an instance of repository', () => {
const mockRepository: MockProxy<Repository<Article>> = Object.assign(Object.create(Repository.prototype), mock<Repository<Article>>());
expect(mockRepository instanceof Repository).toBe(true);
mockRepository.findOne.mockResolvedValueOnce(new Article());
await expect(mockRepository.findOne('a832e632-0335-4191-8469-4d849bbb72be')).resolves.toBeInstanceOf(Article);
})
The only way I found to "solved it" is defining the mocks manually
import { Repository } from 'typeorm';
import { Article } from '../entities/article.entity';
test('should be an instance of repository', async () => {
const mockArticleRepository: jest.Mocked<Repository<Article>> = Object.assign(Object.create(Repository.prototype), {
findOne: jest.fn(),
// other methods or properties to mock
});
expect(mockRepository instanceof Repository).toBe(true);
mockRepository.findOne.mockResolvedValueOnce(new Article());
await expect(mockRepository.findOne('a832e632-0335-4191-8469-4d849bbb72be')).resolves.toBeInstanceOf(Article);
})
PS: there's another way but using jest-create-mock-instance#23
benknab and koroldavid
Metadata
Metadata
Assignees
Labels
No labels