Size: a a a

2020 August 14

BO

Boris Osipov in JS for testing
Alexander Kot
Ребята, всем привет. Есть тут люди, которые используют supertest для тестирования API?
источник

AK

Alexander Kot in JS for testing
Принял понял, задам вопрос, вдруг кто-то сталкивался.
Нужно отправить multipart/form-data с помощью supertest.

test.only('It should upload image to hotel with ID = 1', async () => {
 const response = await request
   .post('/api/hotelImages')
   .set('Authorization', AUTH_TOKEN)
   .field('hotelId', '1')
   .field('cover', '0')
   .attach('hotelImages', IMAGE.IMAGE1);

 expect(response).toBeTrue(); // for debug
}, 30000);

тест выглядит таким образом, судя по документации нельзя использовать .send, использую attach чтобы привязать файл изображения, IMAGE.IMAGE1 - тут абсолютный путь к файлу, его находит, всё в порядке. но при отправке запроса проходит таймаут 30 секунд, получаю
T```imeout - Async callback was not invoked within the 30000 ms timeout specified by jest.setTimeout.Timeout ```и дело тут не в том, что файлы грузятся долго, картинка 200кб, загружается через постман моментально. Запрос должен проходить с 200, даже если не слать картинки вообще
источник

AK

Alexander Kot in JS for testing
если убрать async await, приходит вот такой респонс, который вовсе не похож ни на что
{"data": undefined, "headers": {"authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjo0LCJmaXJzdF9uYW1lIjoiSm9obiIsImxhc3RfbmFtZSI6IkRvZSIsImVtYWlsIjoiYWRtaW4xQGFkbWluLmNvbSIsInBhc3N3b3JkIjoiJDJhJDEwJC93eXRSUml2Li53TC5pOGV3eWFHcE93MFpOZS50TzZ5SndJbGR0QThDUzNMUUVSUFdIQ1ZhIiwicGhvbmUiOiIwNDEyMzQ1Njc4IiwicG9zaXRpb24iOiJhZG1pbiIsInJlbW92ZWRfYXQiOm51bGwsImNyZWF0ZWRfYXQiOiIyMDIwLTA4LTE0VDE2OjAxOjM2LjUxMVoiLCJ1cGRhdGVkX2F0IjoiMjAyMC0wOC0xNFQxNjowMTozNi41MTFaIiwicGVybWlzc2lvbnMiOlt7InBlcm1pc3Npb25JZCI6MSwibmFtZSI6InVzZXJfbWFuYWdlbWVudCIsImFjY2VzcyI6eyJpZCI6MywidHlwZSI6ImFkbWluIn19LHsicGVybWlzc2lvbklkIjoyLCJuYW1lIjoic3VwcGxpZXJfbWFuYWdlbWVudCIsImFjY2VzcyI6eyJpZCI6MywidHlwZSI6ImFkbWluIn19LHsicGVybWlzc2lvbklkIjozLCJuYW1lIjoicHJvZHVjdHNfbWFuYWdlbWVudCIsImFjY2VzcyI6eyJpZCI6MywidHlwZSI6ImFkbWluIn19LHsicGVybWlzc2lvbklkIjo0LCJuYW1lIjoicHJvZHVjdHNfcmV2aWV3X2FuZF9hcHByb3ZlIiwiYWNjZXNzIjp7ImlkIjozLCJ0eXBlIjoiYWRtaW4ifX1dfSwiaWF0IjoxNTk3NDMzOTE1LCJleHAiOjE1OTc0MzM5MjV9.yz7g8RmE5555SwZhfRJFqxQK-fNd95cwxFXt3E9D7Do", "user-agent": "node-superagent/3.8.3"}, "method": "POST", "url": "http://localhost:4002/api/hotelImages"}

ни статус кода, data undefined
источник

AK

Alexander Kot in JS for testing
CURL выглядит таким образом, если слать через сваггер:
curl -X POST "http://localhost:4000/api/hotelImages" -H "accept: application/json" -H "Content-Type: multipart/form-data" -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyIjp7ImlkIjoxLCJmaXJzdF9uYW1lIjoiSm9obiIsImxhc3RfbmFtZSI6IkRvZSIsImVtYWlsIjoiYWRtaW5AYWRtaW4uY29tIiwicGFzc3dvcmQiOiIkMmEkMTAkQnd5L3VXZlp0MkZma0d4em13VTRzLldTcjRDdmtPQ0lSRjRlQUxkNzBwZmZZNWo5WjRyYUsiLCJwaG9uZSI6IjA0MTIzNDU2NzgiLCJwb3NpdGlvbiI6ImFkbWluIiwicmVtb3ZlZF9hdCI6bnVsbCwiY3JlYXRlZF9hdCI6IjIwMjAtMDgtMTRUMTk6MDE6MzEuNjE2WiIsInVwZGF0ZWRfYXQiOiIyMDIwLTA4LTE0VDE5OjAxOjMxLjYxNloiLCJwZXJtaXNzaW9ucyI6W3sicGVybWlzc2lvbklkIjoxLCJuYW1lIjoidXNlcl9tYW5hZ2VtZW50IiwiYWNjZXNzIjp7ImlkIjozLCJ0eXBlIjoiYWRtaW4ifX1dfSwiaWF0IjoxNTk3NDM0MTAxLCJleHAiOjE1OTc0MzQyMjF9.4TZ-mUnzeQmTLI8eBs9XE0LUlU3cpREKrelcGOtbxmU" -d {"hotelId":"1","cover":"0","hotelImages":""}

приходит ответ 200
источник

AK

Alexander Kot in JS for testing
собсно вопрос, как правильно сформировать запрос?
источник

AV

Alex Vershinin in JS for testing
Ребят, привет. А wdio позволяет дождаться выполнения запроса на бэке и потом продолжить тест? Смотрю в intercepter service, но он просто отлавливает, ожиданий я не увидел.
источник

AP

Alexander Popov in JS for testing
Alex Vershinin
Ребят, привет. А wdio позволяет дождаться выполнения запроса на бэке и потом продолжить тест? Смотрю в intercepter service, но он просто отлавливает, ожиданий я не увидел.
Зачем ждать запроса?
источник

AV

Alex Vershinin in JS for testing
Alexander Popov
Зачем ждать запроса?
Потому что на фронте уже кликает, но бэк ещё не закончил работу. Я только так себе могу объяснить то, что тест проходит, если добавить явное ожидание.
источник

AV

Alex Vershinin in JS for testing
Ну типа нет паузы в секунду – шиш, есть пауза – прошёл.
источник

AV

Alex Vershinin in JS for testing
И если не ждать бэка, то печально получается.
источник

AP

Alexander Popov in JS for testing
Alex Vershinin
Потому что на фронте уже кликает, но бэк ещё не закончил работу. Я только так себе могу объяснить то, что тест проходит, если добавить явное ожидание.
Можно или кликать пока не сработает, или попросить фронтов чтоб сделали нормально
источник

AV

Alex Vershinin in JS for testing
Alexander Popov
Можно или кликать пока не сработает, или попросить фронтов чтоб сделали нормально
Это понятно. Но вопрос был в другом)
источник

AV

Alex Vershinin in JS for testing
Не позволяет?
источник

AP

Alexander Popov in JS for testing
Нет
источник

AV

Alex Vershinin in JS for testing
Спасибо
источник

OS

Oleksandr Shevtsov in JS for testing
Alexander Kot
собсно вопрос, как правильно сформировать запрос?
Извини что не по теме твоего вопроса, но по-моему хранить даже хеш пароля "adminadmin" в jwt токене - идея не из лучших.
источник
2020 August 15

m

maryna.kolesnik in JS for testing
Alexander Kot
собсно вопрос, как правильно сформировать запрос?
попробуй добавить .set('enctype', 'multipart/form-data')
источник

AK

Alexander Kot in JS for testing
maryna.kolesnik
попробуй добавить .set('enctype', 'multipart/form-data')
не помогает(
источник

AK

Alexander Kot in JS for testing
тупо зависает, и по таймауту обрывается
источник

B

Bola in JS for testing
Alexander Kot
Принял понял, задам вопрос, вдруг кто-то сталкивался.
Нужно отправить multipart/form-data с помощью supertest.

test.only('It should upload image to hotel with ID = 1', async () => {
 const response = await request
   .post('/api/hotelImages')
   .set('Authorization', AUTH_TOKEN)
   .field('hotelId', '1')
   .field('cover', '0')
   .attach('hotelImages', IMAGE.IMAGE1);

 expect(response).toBeTrue(); // for debug
}, 30000);

тест выглядит таким образом, судя по документации нельзя использовать .send, использую attach чтобы привязать файл изображения, IMAGE.IMAGE1 - тут абсолютный путь к файлу, его находит, всё в порядке. но при отправке запроса проходит таймаут 30 секунд, получаю
T```imeout - Async callback was not invoked within the 30000 ms timeout specified by jest.setTimeout.Timeout ```и дело тут не в том, что файлы грузятся долго, картинка 200кб, загружается через постман моментально. Запрос должен проходить с 200, даже если не слать картинки вообще
Если запрос у тебя есть в постмане, то постман умеет генерить код. Можно там подсмотреть
источник