首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >frisby.js xml ()-在主体中发送.post时出现问题

frisby.js xml ()-在主体中发送.post时出现问题
EN

Stack Overflow用户
提问于 2016-08-12 04:15:12
回答 2查看 442关注 0票数 1

我正在尝试用frisby.js测试一些API。我在通过.post()方法发送xml块时遇到了问题。我可以在Postman中做到这一点。

下面是我的代码:

代码语言:javascript
复制
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

下面是输出:

代码语言:javascript
复制
$ jasmine-node --color --verbose --config ENV inrule spec/inrule_spec.js
{ json: false,
  uri: 'http://dev.<company_api>/api/rules?action=basic',
  body: null,
  method: 'POST',
  headers:
   { accept: 'application/xml',
     authorization: 'Basic <some internal token>',
     'content-length': '787',
     'content-type': 'application/xml' },
  inspectOnFailure: false,
  baseUri: '',
  timeout: 5000 }
<RuleResponse xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://<company_api>/resources/rules"><EntityData i:nil="true" /><Error>Unhandled Exception: Rules controller caught Exception: Object reference not set to an instance of an object.</Error><LogDetailLocation i:nil="true" /><ResponseText>Error Occurred</ResponseText><RuleApplication i:nil="true" /><Status>5</Status><StatusDescription i:nil="true" /></RuleResponse>

Frisby Test: InRule 01 Verify Get - 253 ms

        [ GET http://dev.<company_api>/api/rules?action=basic ] - 253 ms

Frisby Test: InRule 02 Verify Schema (Post) - 24 ms

        [ POST http://dev.<company_api>/api/rules?action=basic ] - 23 ms

Failures:

  1) Frisby Test: InRule 02 Verify Schema (Post)
        [ POST http://dev.<company_api>/api/rules?action=basic ]
   Message:
     Expected 500 to equal 200.
   Stacktrace:
     Error: Expected 500 to equal 200.
    at null.<anonymous> (H:\frisby\esb\node_modules\frisby\lib\frisby.js:493:42)
    at null.<anonymous> (H:\frisby\esb\node_modules\frisby\lib\frisby.js:1074:43)
    at Timer.listOnTimeout (timers.js:92:15)

Finished in 0.278 seconds
2 tests, 5 assertions, 1 failure, 0 skipped

我尝试过使用/不使用“Content-Length”

我尝试过'Content-Type':'application/xml‘和'Content-Type':'application/xml;charset=UTF-8’

我认为问题出在.inspectRequest()正在显示

body: null,

当我查看成功的邮递员为NodeJS请求“生成代码”时,它显示了一个正文:

代码语言:javascript
复制
var options = { method: 'POST',
  url: 'http://dev.rules.itagroupservices.int/api/rules',
  qs: { action: 'basic' },
  headers: 
   { 'postman-token': '69bf39bc-3a6e-f1ea-7d8c-319ebbd41eef',
     'cache-control': 'no-cache',
     accept: 'application/xml',
     authorization: 'Basic <some internal token>',
     'content-type': 'application/xml' },
  body: '<RuleRequest xmlns:i="http://www.w3.org/2001/XMLSchema-instance"\r\n\t\txmlns="http://<company_api>/resources/rules">\r\n  \r\n  <EntityData>\r\n<![CDATA[bunch of xml data]]>\r\n    \r\n  </EntityData>\r\n</RuleRequest>' };

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-08-13 03:31:31

以下是官方的答案:为了发送XML,您必须将请求主体作为头部的一部分发送。

代码语言:javascript
复制
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

这里的另一个例子:https://github.com/vlucas/frisby/issues/290

票数 0
EN

Stack Overflow用户

发布于 2016-08-12 21:59:15

虽然不能直接回答我的问题,但如果其他人也有同样的想法,problem...you可以把你的注意力从frisby中转移出来,转而使用jasmine-node -在你的frisby _spec.js文件中!Node.js有一个request包,可以让你发布任何东西,所以你只需执行一个Jasmine describe/it即可。

代码语言:javascript
复制
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来做这件事,所以我仍然对人们的解决方案持开放态度。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38905332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档