Jest: тестирование методов API от Intercom

У меня возникли проблемы с пониманием того, каким будет поток тестирования для тестирования функций, использующих функции, загруженные из библиотеки JavaScript от Intercom.

Мой метод выглядит так:

 export const generateButton = (handleOnClick) => {
    case "moo":
        return <button onClick = {() => Intercom('show')}>Sign Up</button>
    default: 
        return 'moo'

Ошибка, которую я получаю при запуске:

ReferenceError: Intercom is not defined

Вы импортируете Intercom в свой тестовый файл, где пытаетесь запустить функцию?

CWSites 12.03.2019 17:47

Нет, интерком из CDN, и я не хочу, чтобы шуточные тесты скачивались с него каждый раз, когда он запускается.

Ricky 12.03.2019 17:53

Итак, вы пытаетесь протестировать функцию, использующую Интерком, но не хотите тестировать сам Интерком?

CWSites 12.03.2019 17:55

точно, я хочу, чтобы тест полностью игнорировал часть внутренней связи

Ricky 12.03.2019 17:57

Добавлен ответ, который должен работать для того, что вы хотите сделать.

CWSites 12.03.2019 18:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
5
456
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если я понимаю, что вы пытаетесь сделать, создайте dummyFunction для замены Intercom в ваших тестах. Что-то вроде этого...

const Intercom = jest.fn();

describe('button click', () => {
    it('Intercom is called correctly', () => {
        // whatever component contains the button should be mounted
        const wrapper = mount(<YourComponentHere />);

        // you may need to add a class to target the specific button
        wrapper.find('button').simulate('click');

        expect(dummyFunction).toHaveBeenCalledWith('show');
        expect(dummyFunction).toHaveBeenCalledTimes(1);
    });
});

к сожалению тот же результат, ReferenceError: Intercom не определяется. Я полагаю, это потому, что сам Intercom не подвергается воздействию среды Jest, а вызывается напрямую.

Ricky 12.03.2019 18:04

Возможно, вам придется импортировать его, даже если он не вызывается.

CWSites 12.03.2019 18:07

Если кто-то собирается поставить минус, вы должны хотя бы оставить комментарий о том, почему. Я пытался быть полезным, и голосование должно быть оставлено за бесполезные ответы...

CWSites 05.08.2020 18:15
Ответ принят как подходящий

Итак, я понял, мне нужно было добавить новый файл и указать на него jest, настроенный на package.json, вот так (добавленный файл - mockObject)

"setupFiles": [
  "./config/jest/setupJest.js",
  "./config/jest/mockObject.js"
],

то в самом файле есть это

global.Intercom = () => {
   console.info('Intercom called')
}

Другие вопросы по теме