如何能的SuperAgent和箭扣一起工作?(how can superagent and nock

2019-08-16 17:16发布

在Node.js的,我难以作出的SuperAgent和诺克一起工作。 如果我使用请求而不是SuperAgent的,它完美的作品。

这里是哪里的SuperAgent漏报嘲笑的数据一个简单的例子:

var agent = require('superagent');
var nock = require('nock');

nock('http://thefabric.com')
  .get('/testapi.html')
  .reply(200, {yes: 'it works !'});

agent
  .get('http://thefabric.com/testapi.html')
  .end(function(res){
    console.log(res.text);
  });

该水库对象有没有“文本”属性。 有些不对劲。

现在,如果我做的使用要求同样的事情:

var request = require('request');
var nock = require('nock');

nock('http://thefabric.com')
  .get('/testapi.html')
  .reply(200, {yes: 'it works !'});

request('http://thefabric.com/testapi.html', function (error, response, body) {
  if (!error && response.statusCode == 200) {
    console.log(body)
  }
})

嘲笑的内容正确显示。

我们使用的SuperAgent在测试中,所以我宁愿坚持下去。 有谁知道如何使它发挥作用?

感谢的很多,泽维尔

Answer 1:

我的假设是,诺克与响应application/json的MIME类型,因为你与响应{yes: 'it works'} 看看res.body中的SuperAgent。 如果这也不行,让我知道,我会仔细看看。

编辑:

试试这个:

var agent = require('superagent');
var nock = require('nock');

nock('http://localhost')
.get('/testapi.html')
.reply(200, {yes: 'it works !'}, {'Content-Type': 'application/json'}); //<-- notice the mime type?

agent
.get('http://localhost/testapi.html')
.end(function(res){
  console.log(res.text) //can use res.body if you wish
});

要么...

var agent = require('superagent');
var nock = require('nock');

nock('http://localhost')
.get('/testapi.html')
.reply(200, {yes: 'it works !'});

agent
.get('http://localhost/testapi.html')
.buffer() //<--- notice the buffering call?
.end(function(res){
  console.log(res.text)
});

任何一个现在的作品。 这是我认为正在发生的事情。 箭扣不设置MIME类型,并采用默认值。 我假设默认为application/octet-stream 。 如果是这样的话,那么SuperAgent的不缓存以节省内存的响应。 你必须迫使它缓冲了。 这就是为什么如果你指定一个MIME类型,你的HTTP服务应该不管怎么说,SuperAgent的知道是做什么用application/json ,为什么,如果你可以使用res.textres.body (解析JSON)。



文章来源: how can superagent and nock work together?