Перейти к содержимому

Фотография

Автотесты Node.js + Mocha => REST API DELETE query

Node.js JS Sync-request Mocha

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 5

#1 Tolik_Agail

Tolik_Agail

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Толик Волоков

Отправлено 26 октября 2018 - 09:25

Всем привет!

Тестирую REST API пишем в среде Node.js на js с библиотекой mocha + chai.

Для выполнения рестов используем библиотеку sync-request. 

Удобство в том, что sync-request выполняет запросы в синхронном режиме и пока ответ от реста не получен, движения дальше нет.

Нужды в асинхронности нет т.к. скорость работы автотеста не критична.

 

Столкнулся со следующей проблемой:

var request = require('sync-request');

var header = {
    "Content-Type": "application/json",
    "Cache-Control": "no-cache"
};
deleteRequest = [
    {
        "Name": "Провод",
        "type": "PRODUCT",
        "id" : "123"
    }
];

var response = request("DELETE", microServer + "/repository", {"headers": header, "json": deleteRequest});

DELETE запрос содержит body. И ответ сервиса 404. Судя по логам в микросервис передаётся запрос с пустым body {}.

Где то вычитал, что в таком случае, когда DELETE содержит body необходимо передавать в Header параметр  Content-Length, Но не помогло.

 

При асинхронном  запросе с помощью библиотеки request и request-promise запрос работает. Но использование promise очень осложняет код в тесте и заставляет создавать большую цепочку из promise. + огромная проблема в работе с Mocha+Chai.

 

Через Postman запрос тоже работает.

 

Вопрос:

Может кто сталкивался и знает как решить проблему для sync-request  или знает альтернативную библиотеку для СИНХРОННОГО выполнения REST запросов(и проблем с DELETE body там нет).


  • 0

#2 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 26 октября 2018 - 10:05

просто создайте баг на тракере библиотеки

 

https://github.com/F...ay/sync-request


  • 0

#3 Tolik_Agail

Tolik_Agail

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Толик Волоков

Отправлено 26 октября 2018 - 11:53

Боюсь, это не решит мою проблему в короткий срок :(((


  • 0

#4 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 26 октября 2018 - 13:37

 

 

Боюсь, это не решит мою проблему в короткий срок :(((

иногда и решит, если что не так сделали - там объяснят, а если и правда баг - тогда могут и фикс закоммитить


  • 1

#5 Podmian

Podmian

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Попов Дмитрий

Отправлено 01 ноября 2018 - 11:08

Попробуйте https://www.npmjs.co...ckage/supertest

import * as request from 'supertest';

public static delete(url: string, endpoint: string, parameters?: object | string,  body?: object | string): Promise<any> {

        return request(url)

            .delete(endpoint)

            .set('Authorization', 'Bearer ' + getToken())

            .set('Content-Type', 'application/json')

            .query(parameters);

            .send(body);

    }

А по поводу синхронного, то все решается через async/await


  • 2

#6 Tolik_Agail

Tolik_Agail

    Новый участник

  • Members
  • Pip
  • 3 сообщений
  • ФИО:Толик Волоков

Отправлено 01 ноября 2018 - 13:13

Всем, кто откликнулся большое спасибо! Задача решена.

 async/await - Уже пробовал так. В принципе немногим отличается от цепочки промисов. Где-то даже читал, что это доработка над промисам для лучшения юзабилити, но конструкция не такая гибкая как цепочка промисов.

Тут есть сложности с совместной работой с Mocha.

Если честно перепробовал около 7 библиотек и перепробовал много вариантов реализаций. И не считаю что потрптил время зря. Много узнал)))

И нашёл замечательное решение в виде библиотеки xmlhttprequest.

Имеет флаг true/false для запуска в асинхронном или синхронном режиме. Работает безотказно.

Вот пример, еслли кому интересно:

var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;

module.exports = class visibilityClass{
    constructor(servers) {
        this.servers = servers;
    }
    validatedProductsDelete(testParams) {
        let xhr = new XMLHttpRequest();
        xhr.open("DELETE", this.servers + "/delete", false);
        xhr.setRequestHeader("Content-Type", "application/json");
        xhr.setRequestHeader("accept", "*/*");
        xhr.send(JSON.stringify(testParams.body));
        let statusCode = xhr.status;
        return {
            statusCode: statusCode
        }
    }
};

  • 0



Темы с аналогичным тегами Node.js, JS, Sync-request, Mocha

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных