Форум программистов, компьютерный форум, киберфорум
Node.js
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
 Аватар для DanKor1498
8 / 8 / 4
Регистрация: 15.04.2018
Сообщений: 45

Тестирование сервера JEST

05.03.2020, 16:32. Показов 2276. Ответов 4

Студворк — интернет-сервис помощи студентам
Всем привет, помогите разобраться с тестированием проекта. Есть метод в контроллере, условно
JavaScript
1
2
3
  getHi(req, res){
    res.send("hi");
  }
. Как с помощью JEST правильно составить тест, замокав все зависимости
JavaScript
1
2
3
test('TEST GET HI', () => {  
  expect(fileController.getHi(req, res)).toBe("hi");
});
Помогите плиз, новичок в этой теме, читаю кучу документации не могу разобраться.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2020, 16:32
Ответы с готовыми решениями:

Автоматическое тестирование: как используя Jest + Puppeteer проверить что был вызван alert
Доброе утро. Подскажите пожалуйста, как используя Jest + Puppeteer проверить что после нажатия кнопки был вызван alert c определенным...

Тестирование сервера
Если у себя на Линуксе сделать Апаче сервер,сделать сайт и просто заходить со своего же компьютера,можно ли будет натренироваться...

тестирование сервера субд
Мне дали задание по курсовой роботе,но я не могу розобратся что от меня требуется.... "Обзор средств и методов тестирования...

4
Coding is art
Эксперт JS
540 / 423 / 154
Регистрация: 04.09.2013
Сообщений: 1,066
05.03.2020, 23:01
предпологаю, что речь о юнит тестах:

https://www.chaijs.com/plugins/sinon-chai/

юзаем вот эту штуку..
JavaScript
1
2
3
4
const req = { send: sinon.spy() }
fileController.getHi(req, res)
expect(req.send).to.have.been.calledOnce
expect(req.send).to.have.been.calledWith('hi')

ну или если с jest: https://www.npmjs.com/package/jest-sinon
1
 Аватар для DanKor1498
8 / 8 / 4
Регистрация: 15.04.2018
Сообщений: 45
06.03.2020, 16:33  [ТС]
muxahuk1214, спасибо за совет, если можешь, обьясни такую вещь, вот у меня есть приложение, загружает/редактрует/удаляет файлы, паралельно делая эти же орерации в базе данных. Есть файл контроллер, который имет методы для манипуляции данными, например
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
async deleteFile(req, res) {
    const id = req.params.id; //получаем id с запроса
    if (!File.isIdValid(id)) { //проверяем на валидность методом с File(моя схема mongoose, для работы с БД)
      return res.status(400).send("ID_NOT_VALID");
    }
    const existingFile = await File.findByIdAndDelete(id);//находим по id 
    if (!existingFile) {
      return res.status(404).send("FILE_NOT_FOUND");
    }
 
    fs.unlinkSync(existingFile.getFileStoragePath()); // удаляем файл
    res.send(existingFile.id); //отправляем ответ
  }
И вот задача стоит покрыть тестами каждый метод, исполюзуя только Jest, все зависимости нужно заменить. И вот я понимаю, что нужно подать входные данные, заменить все зависимости и сравнить результат с ожидаемым. Но мой метод ничего не возвращает, он асинхронный, как мне с чем то вобще сравнивать. В браузере он возвратит id удаленный, а здесь как мне сравнить с чем либо.
Написал я такой тест, и что он мне даст:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
File.isIdValid = jest.fn();
File.findByIdAndDelete = jest.fn();
fs.unlinkSync = jest.fn();
let res = { send: jest.fn() };
let req = {};
 
describe("deleteFile()", () => {
  test("file is deleted", async (done) => {
    req = { params: { id: "5e5fd62ac383a" } };
    fileController.deleteFile(req, res);
    console.log(res.send());
    done();
  });
});
Как вобще такие методы можно протестить, пример нужен чтобы понять дальше пойдет...
0
Coding is art
Эксперт JS
540 / 423 / 154
Регистрация: 04.09.2013
Сообщений: 1,066
06.03.2020, 18:59
Это очень сложный вопрос и кодом я на вряд ли помогу т.к. слишком много писать и мне лень, но теорию я объясню:

1. Все зависимости, которые использует твоя функция должны быть замоканы
https://jestjs.io/docs/en/bypassing-module-mocks
т.е. в приложении у тебя есть `const fs = require('fs')`
тебе нужно замокать этот fs модуль так, что бы когда твой маин код вызовет её - ему вернулся замоканый fs (то же самое с File)
в других тест тулах есть похожии либы которые мокают require что бы тестировать
2. на каждый if в твоём коде тебе нужно писать ветку тестов и тестировать что будет если функция `File.isIdValid` вернёт true, что будет если вернёт false
выглядит это примерно так:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
describe('deleteFile', () => {
  describe('when File.isIdValid returns true', () => { // обычно тут используют context, но в jest его нет..
    before(() => {
      File.isIdValid.returns(true) // биндим возврат значения функции что бы зайти в ту или иную ветку кода
    })
    it('should call res.status with 400')....
  })
  describe('when File.isIdValid returns false', () => {
    before(() => {
      File.isIdValid.returns(true)
    })
    describe('when File.findByIdAndDelete returns true', () => {
      ...
    })
    describe('when File.findByIdAndDelete returns false', () => {
      ...
    })
  })
})
3. повторяя предыдущии шаги покрываем все строки кода проверяя вызвались ли все функции с параметрами как мы ожидали т.п...
1
 Аватар для DanKor1498
8 / 8 / 4
Регистрация: 15.04.2018
Сообщений: 45
06.03.2020, 20:02  [ТС]
muxahuk1214, спасибо тебе большое, это уже хоть что-то, хоть план на руках, просто от души
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.03.2020, 20:02
Помогаю со студенческими работами здесь

Тестирование сервера на виндоус
Добрый день! Написал 2 сервера в виндоус на IDLE, для проверки написал клиент. Все работало, пока не поменял строковое сообщение на...

Тестирование сервера Linux
Не подскажите, если сделать сервер на Линуксе, как его можно тестировать из-под Windows? Т.е. я вообще не понимаю, как можно войдя в Вин...

Тестирование почтового сервера
Начались проблемы с периодической недоступностью smtp сервера хостера. Хостер пошел в отказ, у нас все работает, это просто 10 ваших компов...

Тестирование сервера под нагрузкой
Всем привет. может кто-нибудь делал подобное, нужно протестировать новое железо под домино, симулировать работу порядка 200 -...

Нагрузочное тестирование веб-сервера
Здравствуйте! Помогите пожалуйста с выбором ПО для тестирования сервера на страницах которого используется silverlight. Организуется...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru