Шутка издевается над именованным импортированным объектом es6 - PullRequest
2 голосов
/ 21 июня 2019

Я хотел бы знать, как я могу смоделировать импортированный объект для возврата поддельного значения с помощью Jest.

В этом случае я хочу переопределить значение тайм-аута по умолчанию (5000) на 1000чтобы сломать мою функцию

// config.ts
export const config = {
  request: {
    timeout: 5000,
  },
};
// Test file
import * as config from './config';

describe('Requests', () => {
  beforeEach(() => {
    jest.mock('./config');
  });

  afterEach(() => {
    jest.resetAllMocks();
  });

  it('Force timeout value', () => {
    jest.mock('./config');
    config.request.timeout.mockReturnValueOnce(1000);

    expect(config.request.timeout).toEqual(1000); // FAIL: returns 5000 instead of 1000
  });
});

Спасибо!

1 Ответ

2 голосов
/ 22 июня 2019

ОБНОВЛЕННЫЙ ОТВЕТ

В этом случае вы должны использовать Require вместо импорта (ESM).

// config.ts
export const config = {
  request: {
    timeout: 5000
  }
}

Тестовый файл будет выглядеть так:

// Test file

describe('greetings', () => {
  beforeEach(() => jest.resetModules())

  describe('hello', () => {
    describe('when the language is set to galician', () => {
      it('returns galician for hi', () => {
        jest.mock('./config', () => ({ request: { timeout: 1000 } }))
        const { request } = require('./config')
        expect(request.timeout).toEqual(1000)
      })
    })

    describe('when the language is not set to galician', () => {
      it('returns hi', () => {
        jest.mock('./config', () => ({ request: { timeout: 2000 } }))
        const { request } = require('./config')
        expect(request.timeout).toEqual(2000)
      })
    })
  })
})

ссылка - https://medium.com/trabe/mocking-different-values-for-the-same-module-using-jest-a7b8d358d78b

...