使用Nodejs、express和supertest进行集成测试



我正在创建一个应用程序,我需要做一些集成测试。

我实际上在想我该怎么做才能避免我的快速回呼路线的实际行为。

示例:承认我想在快递路线上发布数据,并检查我是否得到HTTP 200响应代码,但没有真正将对象添加到数据库中。

编辑:我正在使用supertest (https://github.com/visionmedia/supertest)

我该怎么办?

request
    .post('/users') 
        .send({
            message : JSON.stringify({
                date: Math.round((new Date()).getTime() / 1000),
                    type_fiche: 'test',
                    id_fiche: 123
                })
            })
            .expect(200)
            .end(done);
       });

编辑2:有可能做一些像模拟吗?比如伪造请求?

你知道,如果我发布一些东西,我需要在数据库中插入一些东西,对吗?

我不想在集成测试中插入任何东西,只测试结果http响应代码。

我的意思是,承认我有一个像/client这样的url,我在上面发布了一个新的客户端。它将在表中创建一个新行。我不想插入任何行,但我需要测试请求的响应代码。

这可能吗?

我建议将sinon.js添加到您选择的任何其他mock库中。为了注入模拟的组件,可能需要进行相当多的重构。

主要思想是模拟用户存储库,它封装了所有数据库与用户数据的通信,并在测试中模拟它。然后将模拟的仓库注入路由器,并使用supertest测试express应用。查看测试GET请求的虚拟用户API的示例。

var routerFactory = require('../path/to/router/factory');
describe('app router', function () {
var app, repository, router;
  beforeEach(function () {
    app = require('express')();
    repository = createFakeUserRepository();
    router = createRotuter(repository);    
  });
 describe('getting user by id', function () {
  beforeEach(function () {
   app.use('/test'm router);
   testedApp = supertest(app);
  });
  describe('GET /user/id', function (){
    beforeEach('setup for valid response', function () {
       repository.getById.returns(Promise.resolve({ expected: 'valid response' }))
 })
     it('returns 200', function (done){
        testedApp.get('/test/user/id')
         .expect(200, JSON.stringify({expected: 'valid response'}), done);
     })
    })
  })
 })
})

function createFakeUserRepository() {
  return {
    getById(): sinon:stub()
    save(): sinon:stub()
  };
}
function createRouter(fakeUserRepository) {
  return routerFactory(fakeUserRepository);
}

您可以使用nock模块。它使用简单,你可以得到任何你想要的数据,你可以测试它。

Ex: nock('http://example.com')
  .get('/users')
  .query(true)
  .reply({results: [{id: 'pgte'}]});

在supertest中你可以测试'id'的值。对于错误情况,你可以使用replyWithError。您可以在这里获得更多详细信息:https://www.npmjs.com/package/nock

最新更新