Как пропустить mocked image и получить атрибуты реального изображения с помощью Jest?

#unit-testing #jestjs

Вопрос:

Я пишу модульные тесты и хочу протестировать img атрибуты. Однако, когда я делаю утверждение, я получаю mocked img attributes, которые находятся под __mocks__ > fileMock.js . Поскольку я издеваюсь над файлами, я получаю только атрибуты mocked file. Как я могу пропустить поддельные файлы в своих тестах?

 describe('Buttons', () => {

test('Clear filters work after filtering tools, workflows and using searchbar', async () => {
    render(<HeaderBar {...defaults} />);

    const clearFilterButton = screen.getByRole('button', { name: 'Clear Filters' });
    const toolsButton = screen.getByRole('button', { name: 'TOOLS' });
    const selectedTools = await within(toolsButton).findByRole('img');
    expect(selectedTools).toHaveAttribute('src', 'images/tools-selected.png');

});
 

И результат теста :

  Buttons › Clear filters work after filtering tools, workflows and using searchbar

expect(element).toHaveAttribute("src", "images/tools-selected.png") // element.getAttribute("src") === "images/tools-selected.png"

Expected the element to have attribute:
  src="images/tools-selected.png"
Received:
  src="test-file-stub"

  39 |         const toolsButton = screen.getByRole('button', { name: 'TOOLS' });
  40 |         const selectedTools = await within(toolsButton).findByRole('img');
> 41 |         expect(selectedTools).toHaveAttribute('src', 'images/tools-selected.png');
 

Мне нужно протестировать реальное изображение и пропустить издевательство img над ним в моем тесте.

Ответ №1:

Похоже, у вас есть макет пользовательского модуля, определенный вручную, в __mock__ папке рядом с вашим фактическим кодом.

В этом случае макет используется в любом тестовом файле, где вы вызываете jest.mock('moduleName') , если automock не установлено true значение, и в этом случае макет будет использоваться всегда.

Если вы явно издеваетесь над файлом, используя jest.mock('moduleName') его, просто удалите его из тестового файла, где вы хотите использовать фактический код вместо макета.

Если вы automock установили значение true в своей конфигурации Jest, вы можете указать Jest использовать исходный файл кода в данном тесте, используя jest.unmock('moduleName') .

Комментарии:

1. Спасибо за ответ, я использую макет пользовательского модуля вручную, а расширения png высмеиваются под макетом > fileMock.js . однако тест по-прежнему использует поддельные данные. Я использовал unmock перед рендерингом в тесте. … jest.unmock(‘./tools-selected.png’); render(<HeaderBar {…defaults} />); …