Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для Tryd0g0lik
56 / 3 / 1
Регистрация: 04.05.2012
Сообщений: 238

Как через Jest протестировать функцию внутри которой fetch()?

30.08.2023, 04:49. Показов 2214. Ответов 26

Студворк — интернет-сервис помощи студентам
День добрый.
Подскажите. Как через Jest протестировать функцию внутри которой находится fetch c CORS-POST-запросом.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
const body = document.getElementsByTagName('body') as HTMLCollectionOf<HTMLElement>;
 
/*** This's a handlers for the Events */
EventsAutorization(e: MouseEvent | KeyboardEvent) {
  if (((....).type === "submit"
    || ((....).key === 'Enter')) {
    e.preventDefault();
 
 
    const formAuthorisation = (body[0].querySelector('.author') as HTMLElement);
    /* remove a form uatрorization */
 
    /* public form input type=text for will send the message into the chat. */
    let newPerson: any; // It's one a new User
    const req = new fetchRequest();
        req.loadExistencesLogins().then(...)
       .....
'EventsAutorization' - в реале отдельно написанный обработчик для события
'fetchRequest' - вызываю класс в котором, там host, разрешения для cors и прочие тех=данные.
'.loadExistencesLogins()' - асинхронный метод который ждет/получает ответ от сервера.

Вот для тестирования 'EventsAutorization' мне что-то надо с '.loadExistencesLogins()' иначе в консоли (после запуска теста)там что-то на подобии синтаксиса - ошибки..

Сам тест банально прост. Просто первый попавшийся для проверки "А запускается ли "

JavaScript
1
2
3
4
5
6
7
8
test.each([
     ["sendLoginStr: a new one login's name=> ['Demo']", 'Demo', 200],
   ])(`.add(%s)`, (a, b, expected) => {
 
    sendLoginStr(b)
        .then((respons) => {
            expect(respons.json()).toBe(expected);
        })
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
30.08.2023, 04:49
Ответы с готовыми решениями:

Jest - как протестировать alert из функции
У меня есть функция, которая вызывает alert: export function getSqrt(x) { alert(x**2); } тестовый файл: import {...

Jest протестировать отключение питания
Доброго времени суток! Сейчас пишу систему, работающую с деньгами, поэтому она должна быть надёжной и не давать ошибок даже при отключении...

Jest - протестировать вызов функции по клику
Никак не пойму как сделать. У меня есть ф-ия: export function initListeners(app) { const button =...

26
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3833 / 1676 / 431
Регистрация: 14.03.2022
Сообщений: 4,228
30.08.2023, 09:25
Цитата Сообщение от Tryd0g0lik Посмотреть сообщение
Как через Jest протестировать функцию внутри которой находится fetch
Я, как просто интересующийся тестированием, могу предположить что тут нужно воспользоваться "моками"...
Вот один из вариантов

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { APIRequest } from './api'
 
describe('testing api', () => {
  beforeEach(() => {
    fetch.resetMocks()
  })
 
  it('calls google and returns data to me', async () => {
    fetch.mockResponseOnce(JSON.stringify({ data: '12345' }))
 
    //assert on the response
    const res = await APIRequest('google')
    expect(res.data).toEqual('12345')
 
    //assert on the times called and arguments given to fetch
    expect(fetch.mock.calls.length).toEqual(1)
    expect(fetch.mock.calls[0][0]).toEqual('https://google.com')
  })
})
https://github.com/jefflau/jest-fetch-mock

Добавлено через 2 минуты
Tryd0g0lik, вот еще видос про такое...

1
 Аватар для Tryd0g0lik
56 / 3 / 1
Регистрация: 04.05.2012
Сообщений: 238
30.08.2023, 10:23  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
как просто интересующийся тестированием,
Спасибо , что не жадный. Мне они интересны и нужны. Без наз них просто массу времени теряю. А тут еще и webSocket и проблема с браузером из jest/
ws does not work in the browser. Browser clients must use the native WebSocket object
Подскажешь?
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3833 / 1676 / 431
Регистрация: 14.03.2022
Сообщений: 4,228
30.08.2023, 10:29
С WebSocket дела не имел, не особо что по нему знаю.
1
 Аватар для Tryd0g0lik
56 / 3 / 1
Регистрация: 04.05.2012
Сообщений: 238
30.08.2023, 10:44  [ТС]
Спасибо на том что есть. Видел fechMock. Но одно не понимаю. Кк не имея прямого доступа к fech - глушить его. )
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3833 / 1676 / 431
Регистрация: 14.03.2022
Сообщений: 4,228
30.08.2023, 10:51
Цитата Сообщение от Tryd0g0lik Посмотреть сообщение
Кк не имея прямого доступа к fech - глушить его. )
В видосе про "как" и рассказывается.

Просто я не делаю тесты по работе... Поскольку дело это "отъест" достаточно много "человекочасов". Но интересуюсь этой темой, поскольку она мне потенциально интересна.
Вот как интересующийся дилетант могу просто делать предположения.
А вот что-то утверждать или делать полноценные примеры - не особо готов.
0
 Аватар для Tryd0g0lik
56 / 3 / 1
Регистрация: 04.05.2012
Сообщений: 238
30.08.2023, 10:58  [ТС]
смотрю уже
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3833 / 1676 / 431
Регистрация: 14.03.2022
Сообщений: 4,228
30.08.2023, 11:03
Tryd0g0lik, вот еще более подробный видос, что я смотрел ранее
Там с 32-й минуты подробно описывается как "замокать" axios. Могу предположить что fetch "мокается" аналогично.

1
 Аватар для Tryd0g0lik
56 / 3 / 1
Регистрация: 04.05.2012
Сообщений: 238
30.08.2023, 12:34  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Но интересуюсь этой темой, поскольку она мне потенциально интересна
Если уже собрана библиотека справочного материала , поделись.
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3833 / 1676 / 431
Регистрация: 14.03.2022
Сообщений: 4,228
30.08.2023, 12:44
Цитата Сообщение от Tryd0g0lik Посмотреть сообщение
Если уже собрана библиотека справочного материала , поделись
Вот видос этот...
Потом в учебнике читал...
https://learn.javascript.ru/testing
Статейки всякие. Но ссылки на них не сохранял, чисто ознакомительно...
1
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
30.08.2023, 12:59
Цитата Сообщение от krvsa Посмотреть сообщение
Просто я не делаю тесты по работе... Поскольку дело это "отъест" достаточно много "человекочасов"
а гит ваш не стартует там всякие проверки при пулрекветсе?
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3833 / 1676 / 431
Регистрация: 14.03.2022
Сообщений: 4,228
30.08.2023, 14:17
Цитата Сообщение от pincet Посмотреть сообщение
а гит ваш не стартует там всякие проверки при пулрекветсе?
Так у нас их нет - нечего и стартовать...
Делать сами тесты довольно "человекозатратное" дело. Руководство не готово оплачивать эти "человекомесяцы".
0
 Аватар для Tryd0g0lik
56 / 3 / 1
Регистрация: 04.05.2012
Сообщений: 238
31.08.2023, 01:37  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Руководство не готово оплачивать
Как и большинство - качество требуют зажимая расходы
0
31.08.2023, 04:45

Не по теме:

Цитата Сообщение от krvsa Посмотреть сообщение
Делать сами тесты довольно "человекозатратное" дело. Руководство не готово оплачивать эти "человекомесяцы".
Если бы только они понимали, сколько человеколет разработки могут спасти вовремя сделанные тесты, ага.

0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3833 / 1676 / 431
Регистрация: 14.03.2022
Сообщений: 4,228
31.08.2023, 10:02
Само наличие тестов особо дело не меняет.
Вот если их делать умело - тогда эффект будет. Но такому так же нужно учиться, как собственно и писать путевые программки...

На мой взгляд (тесто-дилетантский), путевые тесты будут гораздо более сложными и времязатратными, нежели сам тестируемый алгоритм.
А для такого нужно уже иметь "двойной" состав разработчиков. Либо время на разработку нужно увеличивать минимум в двое...

Да и сама поддержка кода+тесты будет требовать больше времени. При чем больше времени будет, скорее всего, именно на тесты.

На вопрос начальства:
- Чем сейчас занимаетесь?
Придется довольно долго отвечать:
- Пишем тесты...

Для себя вообще вижу следующий расклад - нужно штатно держать отдел или группу чисто на тесты. С балансом минимум 2:1, т.е. на 2-х разрабов хотя бы один "тестовик".
А это уже приличный штат получается.
0
 Аватар для Tryd0g0lik
56 / 3 / 1
Регистрация: 04.05.2012
Сообщений: 238
31.08.2023, 12:12  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
или группу чисто на тесты
Ну это , как понимаю классическая модель сегодня.
Мне кажется КПД все равно низкий.

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

Вот все на одного повесить, вот это дело. Стоимость продукта остается та же, а вот по времени исполнения уступает (правда на рынке это не объяснить).
Зато пишешь логику и тут же видишь недочеты.
Говорю так как сам уже запарился делать, проверять (без тестов), переделывать.
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3833 / 1676 / 431
Регистрация: 14.03.2022
Сообщений: 4,228
31.08.2023, 12:17
Цитата Сообщение от Tryd0g0lik Посмотреть сообщение
Стоимость продукта остается та же, а вот по времени исполнения уступает
Так если время увеличивается - увеличивается и себестоимость разработки. Значит и стоимость продукта должна расти.
Иначе доход будет меньше...
0
 Аватар для pincet
1654 / 1153 / 173
Регистрация: 23.07.2010
Сообщений: 6,910
31.08.2023, 12:20
Цитата Сообщение от Tryd0g0lik Посмотреть сообщение
Вот все на одного повесить, вот это дело.
обычно так и есть. и при оценке очередной `стори` часы включаются для разраба
другой случай когда возникла мысль/фантазия переходить на использование тестов для уже всего кода (в т.ч. уже написанного), тут да, нужна отдельная стори для имеющегося кода
0
 Аватар для Tryd0g0lik
56 / 3 / 1
Регистрация: 04.05.2012
Сообщений: 238
31.08.2023, 13:52  [ТС]
Цитата Сообщение от krvsa Посмотреть сообщение
Значит и стоимость продукта должна расти
Теоретически оно так. Но я говорю .... работаем без тестировщиков , тесты вешаем на разработчиков. )) . деньги остаются, просто уходят на разработчика. Вот такая муть )) .

---
Разобрался с WebSocketom
0
Эксперт JSЭксперт HTML/CSS
 Аватар для krvsa
3833 / 1676 / 431
Регистрация: 14.03.2022
Сообщений: 4,228
31.08.2023, 15:27
Цитата Сообщение от Tryd0g0lik Посмотреть сообщение
деньги остаются, просто уходят на разработчика
Если платят те же деньги за время написания тестов - это уже нормально.
Какая профессионалам разница что писать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.08.2023, 15:27
Помогаю со студенческими работами здесь

Как правильно написать функцию которая будет принимать как компонент так и JSX.Element в jest mount/shallow
Как правильно написать функцию которая будет принимать как Component так и JSX.Element и правильно передавала его в jest mount? Сейчас...

Реализовать и протестировать функцию перегрузки операции потокового вывода как дружественную функцию для класса Matrix
Добавить в определение класса Matrix, реализовать и протестировать функцию перегрузки операции потокового вывода как дружественную функцию...

Как протестировать метод контроллера, принимающий модель с свойством IFormFile внутри?
Всем привет. Метод контроллера: public async Task&lt;string&gt; CreateCategory(CreateCategoryQuery query)...

Как протестировать функцию в JUnit ?
нужно протестировать функцию String coding() в JUnit: - убедится в том, что функция не возвращает null. - и что она возвращает...

Как через fetch вытянуть данные с OMDb API
Например мы записываем в инпут фильм бэтмен и далее при нажатии кнопки вытаскиваем данные по имени фильма в блок result &lt;div...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru