【问题标题】:Stubbing request\responses for middleware tests in Express在 Express 中为中间件测试存根请求\响应
【发布时间】:2016-12-24 07:20:56
【问题描述】:

我的 Express 应用中有一些中间件功能,它们向单独的服务器发出传出请求,然后将返回的响应发送回客户端。

这样的事情:

var request = require('request'),
  helpers = require('./helpers.js');

//GET
module.exports.fetch = function(req, res) {
  var options = helpers.buildAPIRequestOptions(req);
  request(options, function(err, response, body){
    res.status(response.statusCode).send(body);
  });
};

我正在考虑编写单元测试,并希望在使用这些函数的传出请求被触发时模拟并返回我自己的响应。

我遇到了 supertest,并且尝试过编写这样的套件:

var app = require('./index.js'),
  request = require('supertest')(app),
  should = require('should');

//GET
describe('GET requests', function(){
  it('should do something', function(done){
    request
      .get('/api/schemes')
      .expect(200, done)
      .end(function(err, res){
        // console.log(res);
        // console.log(err);
        res.status.should.equal(200);
      });
  });
});

我想我需要像 sinon 这样的东西,所以我可以监视一个请求,该请求会影响我的中间件函数并返回我选择的响应。我只是在努力理解如何将存根添加到我的测试中。

有人可以提供进一步的建议吗?

谢谢

【问题讨论】:

    标签: node.js unit-testing express middleware sinon


    【解决方案1】:

    node-nock 可以记录通过http 模块发出的请求(因此,通过代理,请求)。然后可以将这些排队等待在您的测试套件中重放。 GitHub 页面有很好的文档。

    【讨论】:

    • nock 是我用来模拟外部网络请求的工具
    • 感谢您的建议,它确实看起来很有用,只是想弄清楚如何与我在我的 OP 中分享的示例一起使用! :)
    • @mindparse 在请求之前输入nock.recorder.rec();,您将获得代码来模拟您刚刚在控制台中获得的响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多