Skip to content

Doesn't support instanceof #90

@leosuncin

Description

@leosuncin

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions