Параметры поста x-www-form-urlencoded (body) в frisby npm не работают - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь проверить конечную точку отдыха 'http://xxxxxxx/j_spring_security_check', чтобы получить аутентификацию с пакетом frisby npm.

Я могу работать в почтальоне, выбрав тело запроса в качестве' x-www-form-urlencoded 'tab и учитывая мои учетные данные приложения, такие как key-value, все работает нормально, как и ожидалось.Но в frisby npm я не могу установить тело запроса как «x-www-form-urlencoded».Я не могу войти в систему с помощью этого скрипта.

Пожалуйста, помогите мне в этом или любых других альтернативных предложениях было бы здорово.

Here is my code:



var frisby7=require('frisby');
const qs = require('qs');


describe('API reference', function() {
    var baseURL='http://xxxxxx/j_spring_security_check';

 it('Simple Test with post url-encode form body request ', function() {
console.log("**********")
        frisby7.globalSetup({
            request: {
                headers:{'Content-Type':'application/x-www-form-urlencoded'}
            // headers: { 'X-Ms-Source':'api','X-Ms-Format':'xml','Authorization':'Basic c2hyZXlhIGdveWFsOm0jbWY4cDlMZ2ZAMU1xUTg='}
            }
            });
return frisby7.post(baseURL,
    {
        form: { j_username:'xxxx@xxxxx.com', j_password:'xxxx' }
    }).then(function (res) { // res = FrisbyResponse object
        console.log('status '+res.status);
        console.log('body '+res.body);
        //return res;
      }); 
});

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

Попробуйте что-то вроде этого:

var frisby = require("frisby");
const Joi = frisby.Joi;

var req1 = {
    method: "get",
    url: "pass url here", 
    headers : {
        "Accept": "application/json", 
        "content-type" : "application/json",
        'Authorization': 'Basic ' + Buffer.from(username + ":" + password).toString('base64') // pass username and password for //validation
    },
    body: {}
};

describe('spec file name', function () {
    it("spec file name" + dateTime, function(){
        return frisby
            .setup({ request: { headers : req1.headers } })     
            .get(req1.url)
            .expect("status", 200)
            .expect("header", "Content-Type", "application/json; charset=utf-8")
            .expect("jsonTypes", {
                "message": Joi.string()
            })  
            .then(function(res) {
                var body = res.body;
                body = JSON.parse(body);
                expect(body.message).toBeDefined();
            })
            .then(function(res) {
                var body = res.body;
                body = JSON.parse(body);

                var req2 = {
                    method: "put",
                    url: "pass url here",
                    headers : {
                        "Accept": "application/json", 
                        "content-type" : "application/json",
                        "Authorization": "JWT " + Token  // anything that you using to authenticate
                    },
                    body: {}
                };
                return frisby
                    .setup({ request: { headers : req2.headers } })
                    .put(req2.url)
                    .expect("status", 200)
                    .expect("header", "content-type", "application/json; charset=utf-8")
                    .expect("jsonTypes", {
                        "message": Joi.string()
                    })  
                    .then(function(res) {
                        var body = res.body;
                        body = JSON.parse(body);
                        expect(body.message).toBeDefined();
                    })          
            });             
    });
});
0 голосов
/ 30 декабря 2018

В настоящее время вы отправляете объект в теле, как если бы вы использовали 'multipart/form-data'.Чтобы отправить запрос как 'application/x-www-form-urlencoded', вам нужно URI кодировать каждое свойство, а затем опубликовать их как строку запроса

Попробуйте это так

var objToSend = { j_username:'xxxx@xxxxx.com', j_password:'xxxx' };
var uriObj = Object.keys(objToSend).map(key => encodeURIComponent(key) + '=' + encodeURIComponent(objToSend[key])).join('&');
var url = baseURL + '?' + uriObj
frisby7.post(url);
...