Node.js frisby.js.post()-无法在正文中发送xml

Node.js frisby.js.post()-无法在正文中发送xml,node.js,frisby.js,inrule,Node.js,Frisby.js,Inrule,我正在尝试用frisby.js测试一些API。通过.post()方法发送xml块时遇到问题。我可以在邮递员那里做得很好 这是我的密码: var xml_body = envSetup.ENV_DATA.inrule.xml_post_kia1; frisby.create('InRule 02 Verify XML Post') .addHeaders({ 'Accept': 'application/xml', 'Authorization': 'Basic <so

我正在尝试用frisby.js测试一些API。通过
.post()
方法发送xml块时遇到问题。我可以在邮递员那里做得很好

这是我的密码:

var xml_body = envSetup.ENV_DATA.inrule.xml_post_kia1;

frisby.create('InRule 02 Verify XML Post')
  .addHeaders({
    'Accept': 'application/xml',
    'Authorization': 'Basic <some internal token>',
    'Content-Length': xml_body.length,
    'Content-Type': 'application/xml'
  })
  .post(envSetup.URL + '/' + resource + '?action=basic', xml_body)
  .inspectRequest()

  .inspectBody()
  .expectStatus(200)
  .expectHeaderContains('Content-Type', 'application/xml')

.toss(); // InRule 02

我不知道为什么frisby没有展示身体(因此没有发送身体?),即使我把
xml\u身体
放在应该放的地方。

虽然不是对我问题的直接回答,如果其他人也有同样的问题……你可以把注意力从
frisby
中移开,退后一步,使用
jasmine节点
——并且在你的frisby
\u spec.js
文件中!Node.js有一个
request
包,可以让你发布任何东西,所以你可以执行一个Jasmine descripe/it

describe('Stuff', function() {

  it('DoIt', function(done) {
    var options = {
      method: 'POST',
      url: envSetup.URL + '/' + resource,
      qs: { action: 'basic' },
      headers:
       { accept: 'application/xml',
         authorization: yourAuthorization,
         'content-type': 'application/xml' },
      body: xml_variable
    };

    request(options, function (error, response, body) {
      if (error) throw new Error(error);
      //console.log(body);
      expect(response.statusCode).toBe(200);
      done();
    });
  });
});

这将成功地将XML发布到API,并以
body
的形式获得回复。我宁愿能在
frisby.js中做到这一点,所以我仍然对人们的解决方案持开放态度。

虽然不是我问题的直接答案,但万一其他人也有同样的问题……你可以把注意力从
frisby
中移开,退后一步,使用
jasmine node
——在你的frisby
\u spec.js
文件中!Node.js有一个
request
包,可以让你发布任何东西,所以你可以执行一个Jasmine descripe/it

describe('Stuff', function() {

  it('DoIt', function(done) {
    var options = {
      method: 'POST',
      url: envSetup.URL + '/' + resource,
      qs: { action: 'basic' },
      headers:
       { accept: 'application/xml',
         authorization: yourAuthorization,
         'content-type': 'application/xml' },
      body: xml_variable
    };

    request(options, function (error, response, body) {
      if (error) throw new Error(error);
      //console.log(body);
      expect(response.statusCode).toBe(200);
      done();
    });
  });
});

这将成功地将XML发布到API,并以
body
的形式获得回复。我希望能够在
frisby.js中实现这一点,因此我仍然愿意接受人们的解决方案。

这里是官方答案:为了发送XML,您必须将请求正文作为标题的一部分发送

frisby.create('Post XML to api')
  .post(someUrl, {}, {
    headers: headers4,
    body: xml1
    }
  )
  //.inspectRequest()

  //.inspectBody()
  .expectHeaderContains('Content-Type', 'application/xml')
  .expectStatus(200)
.toss();
您可以看到,我在
.post(url,body,header)
格式中将主体部分留空,并带有{}。然后在第三个.post变量中给它一个
body:xmlVariable


这里的另一个示例:

这里是官方答案:为了发送XML,您必须将请求正文作为标题的一部分发送

frisby.create('Post XML to api')
  .post(someUrl, {}, {
    headers: headers4,
    body: xml1
    }
  )
  //.inspectRequest()

  //.inspectBody()
  .expectHeaderContains('Content-Type', 'application/xml')
  .expectStatus(200)
.toss();
您可以看到,我在
.post(url,body,header)
格式中将主体部分留空,并带有{}。然后在第三个.post变量中给它一个
body:xmlVariable

另一个例子是: