71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 721

Тестирование socket на js

06.06.2024, 18:08. Показов 723. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
По тестированию имел дело с postman - т.е. понимаю как http запрос - ответ тестировать. Понятно как юнит-тесты делать - вижу jest пакет есть для nodejs. А как протестировать сокетное соединение?
Я с ходу в jest пытаюсь вставить, но ничего не понятно - может будет у кого пример как вообще сделать, с любой библиотекой?
Суть в чем - есть localhost сервер, для которого создается сокетное соединение. Отправляются сообщения, надо проверить приходящие в ответ.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.06.2024, 18:08
Ответы с готовыми решениями:

Тестирование Socket через PuTTY
Приветствую, уважаемые форумчане! Возникла проблема с тестирование простейшей программы для работы Socket. Но у меня возникает проблема...

Невозможно создать Socket: Socket sock = new Socket(someHostString,somePortInt);
Народ! Помогите пожалуйста. Вся красота губится на exception что выскакивает в момент создания сокета: Socket sock = new...

Socket Error 10038 Socket operation on Non-Socket
Написал простенькую программу для проверки почты с использованием компонентов Indy. При попытке получить почту постоянно вижу такое...

5
Эксперт .NET
 Аватар для Usaga
14100 / 9317 / 1349
Регистрация: 21.01.2016
Сообщений: 34,992
07.06.2024, 05:48
AndrSlav, что за сокетное соединение? Речь о WebSockets? Это расширение протокола HTTP, но работать с ним надо через другое API. В nodejs есть встроенный клиент (в последних версиях). Или можно сторонний поставить.
1
Молодой техлид)
Эксперт JSЭксперт HTML/CSS
 Аватар для mr_dramm
1818 / 1056 / 329
Регистрация: 17.07.2021
Сообщений: 2,146
Записей в блоге: 14
07.06.2024, 15:56
Лучший ответ Сообщение было отмечено AndrSlav как решение

Решение

Не по теме:

Цитата Сообщение от Usaga Посмотреть сообщение
WebSockets это расширение протокола HTTP
С большим уважением Usaga, но нет. rfc6455 о схожести протоколов можно прочитать в секции 1.7. Relationship to TCP and HTTP, но WebSocket это независимый протокол, схожесть заключается в том что установка соединения между клиентом и сервером выполняется схожим способом, очевидно потому что оба протокола tcp based и поэтому используется tcp handsnake, изначльно браузер связвается с http сервером и запрашивает переключение протокола:
- Клиент отправляет HTTP-запрос с методом GET, включающий специальный заголовок "Upgrade: websocket".
- Если сервер поддерживает WebSockets, он отвечает с кодом состояния "101 Switching Protocols" и также включает заголовок Upgrade: websocket.
- После успешного завершения обмена HTTP-заголовками устанавливается двустороннее WebSocket-соединение.
да и сами по себе протоколы очень непохожи, http намного более широкий в плане спецификации и поддержке возможностей.



Цитата Сообщение от AndrSlav Посмотреть сообщение
Суть в чем - есть localhost сервер, для которого создается сокетное соединение. Отправляются сообщения, надо проверить приходящие в ответ.
Как уже написал Usaga лучше всего использовать клиент на сервере, я только немного дополню ответ. Запускаем сервер и клиент на сервере, создаем массив обмена сообщениями. Без привязки к конкретному апи

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
    
test("some test", async (done) => {
  const messages = [
    [
      ["1", ""],
      ["", "1"],
    ],
    [
      ["2", ""], // клиент отправляет 1 сервер ожидает получить 1
      ["", "2"],
    ], // сервер отправляет 2 клиент отправляет 2
  ];
  let answer = "";
  client.on("message", (data) => {
    expect(data).toBe(answer );
    step()
  });
  
  server.on("message", (data) => {
    expect(data).toBe(answer );
    step()
  });
  const step = () => {
    if (currentIndex > messages.length - 1) return done()
    const m = messages[currentIndex++];
 
    if (m[0][0] !== "") {
      // клиент отправляет на сервер сообщение
      answer = m[1][1];
      client.send(m[0][0]);
    } else {
      // сервер отправляет на клиент сообщение
      answer = m[0][1];
      server.send(m[1][0]);
    }
    
  };
  step();
});
Но все же я думаю, что модульное тестирование не совсем предназначено для тестирования, клиента и сервера. Нужно тестировать саму логику, которая работает с клиентом и сервером, заменяя клиент и сервер мок объектом
1
07.06.2024, 16:17

Не по теме:

mr_dramm, полностью согласен. Я криво выразился. Не расширение, а используется только для hand shake.

0
71 / 59 / 14
Регистрация: 20.12.2013
Сообщений: 721
07.06.2024, 19:28  [ТС]
Спасибо!
Что-то не подумал проверку прямо в коллбэк сокета занести. Так действительно удобнее.

Добавлено через 1 час 2 минуты
Цитата Сообщение от mr_dramm Посмотреть сообщение
Но все же я думаю, что модульное тестирование не совсем предназначено для тестирования, клиента и сервера. Нужно тестировать саму логику, которая работает с клиентом и сервером, заменяя клиент и сервер мок объектом
В смысле сервисные функции на сторонах сервера и клиента замокать, а юнит тестами проверять отдельно сами функции?
Я сначала подумал интеграционной тестирование базовое сделать, чтобы в общем картину представить. Я все равно дебагингом по сути интеграционное тестирование и делаю. Я на самом деле просто не особо с принципиальной архитектурой разобрался - в ходе дебагинга меняю, поэтому функции тоже меняю, а интеграционно по сути более-менее понятно сообщение и ответ какие.
Просто дебагинг ломается от исправлений, а так хоть сразу видно будет, что поломалось.
0
Молодой техлид)
Эксперт JSЭксперт HTML/CSS
 Аватар для mr_dramm
1818 / 1056 / 329
Регистрация: 17.07.2021
Сообщений: 2,146
Записей в блоге: 14
08.06.2024, 00:31
Цитата Сообщение от AndrSlav Посмотреть сообщение
В смысле сервисные функции на сторонах сервера и клиента замокать, а юнит тестами проверять отдельно сами функции?
тесты полезны на этапе разработки, когда мы меняем код и хотим быстро удостовериться что новый код работает, каждый тест выполняет определенный сценарий. Также благодаря тестам можно проще понять при каком сценарии какие модули взаимодействуют.

Т.е. вместо написания кода тестирования логики с использованием клиент сервера

JavaScript
1
2
3
4
5
6
  client.send(...)
  server.on("message", (data) => {
    const answer = logic(data)
    expect(answer ).toBe(answerExpected);
    step()
  });
можно сразу писать тестирование логики

JavaScript
1
2
3
4
for(const [message, answerExpected] of messages){
    const answer = logic(message)
    expect(answer).toBe(answerExpected);
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.06.2024, 00:31
Помогаю со студенческими работами здесь

[Socket.io/Express] Как обойти круговую зависимость при использовани socket.io?
Всем привет. Есть приложение на Node.js / Express / Socket.io. У него есть API, с которым пользователи взаимодействуют с помощью веб...

Посоветуйте i5-7600 (Socket 1151) или i7-6800 (Socket 2011-3)
Посоветуйте, что взять i7-7700 (Socket 1151) или i7-6800 (Socket 2011-3) материнки на Z270 и на X99 (соответственно) Чем я...

Assembler linux. Socket recv and socket send invalid arguments
Пишу шеллкод. Он ожидает подключения с 2222 порта, сам подключается на 1111 порт, выделяет память, и должен выполняться пересылка сообщений...

Совместимость AMd athlon 2 x2 245 socket am3 к материнке ht2000 k8m890m-m socket am2
Подойдет ли проц AMd athlon 2 x2 245 socket am3 к материнке ht2000 k8m890m-m socket am2

Nodejs net socket server and android socket client
Добрый день Форумчане нужно помощь гуру! Решил с другом написать сервер на ноде с использование сокетов и андроид клиент отправки сокет. Но...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru