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

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

05.03.2020, 16:32. Показов 2245. Ответов 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
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru