node.js - 如何在 Express js 单元测试中使用 sinon js

标签 node.js unit-testing express sinon sinon-chai

嗨,我想对我的 express js 代码进行单元测试,我想模拟数据,因此在搜索多个网站和博客后,我找到了 this库,但我不清楚如何使用此库进行模拟或数据。
我的测试代码是

var request = require('supertest');
var server = require('./app');
var chai = require('chai');
var chaiHttp = require('chai-http');

var server = require('./app');

var should = chai.should();
chai.use(chaiHttp);

describe('loading express', function () {

  it('responds to /', function testSlash(done) {
    request(server)
      .get('/')
      .expect(200, done);
  });

  it('404 everything else', function testPath(done) {
    request(server)
      .get('/foo/bar')
      .expect(404, done);
  });

  it('responds to /customers/getCustomerData', function testPath(done) {
    request(server)
      .get('/customers/getCustomerData?id=0987654321')
      .end(function(err, res){
        res.should.have.status(200);
        res.body.should.be.a('object');
        res.body.status.should.equal("success");
        res.body.data.customerId.should.equal("0987654321");

        done();
      });
  });

});

目前这段代码正在从数据库中获取数据,但我想要使用模拟数据进行单元测试。我怎样才能做到这一点?

__编辑__

我想测试写在 Express js 路由文件中的代码。我在内部调用的这条路线 app.js 像这样的文件
var customers = require('./routes/customers');
app.use('/customers', customers);

现在的代码是客户路线文件包含是
function getCustomerData(req, res, next) {
    var response = {};
    var cb = function (response) {
        res.send(response);
    }
    var modelObj = req.models.customer_master;
    var data = req.query;
    controllers.customers.get(modelObj, data, cb);
};
router.get('/getCustomerData', function (req, res, next) {
    getCustomerData(req, res, next);
});

我想使用模拟数据测试“get”方法的响应

最佳答案

我想你想 stub 你的 Controller 中间件。由于您没有提供任何服务器端代码,我只是假设一些事情:

app.get('/', rootController.get);

现在你想 stub 这个 Controller :
it('responds to /', function testSlash(done) {
  const rootController = require('./path/to/your/controller');
  const rootControllerStub = sinon.stub(rootController, "get",
    function(req, res, next){
      res.status(200).json({stubbed: 'data'});
    });
  request(server)
    .get('/')
    .expect(200)
    .expect({stubbed: 'data'})
    .end(done);
});

关于node.js - 如何在 Express js 单元测试中使用 sinon js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39747397/

相关文章:

node.js - 如何即时转换上传的文件并将其直接流式传输到 sails 内的 amazon S3

node.js - 使用 cookie 进行 Node 用户身份验证

c++ - 测试新运算符(operator)失败

javascript - 测试是否在 Jasmine 中捕获了异常

javascript - 如何通过nodejsexpress从Angularjs上传文件到s3

javascript - 带有错误处理功能的外部扭曲函数

javascript - 在 IntelliJ Ultimate 12 中查看 node.js api 文档

javascript - eslint:错误解析错误:关键字 'const'被保留

python - Pyramid - 为文件上传表单编写单元测试

node.js - nodejs 没有连接到任何其他端口