使用 await 前后对 DynamoDB 进行超级测试和检查

supertest and checking DynamoDB before and after using await

我想使用 supertest 测试我的 koa API 路由,并检查之前和之后 DynamoDB 中的内容,以确保终点达到预期效果。

// app related
const pool = require('../../src/common/pool');
const app = require('../../server');
// for testing
const uuid = require('uuid');
const supertest = require('supertest');
// listen on port 40002
const request = supertest.agent(app.listen(4002));
describe('test', () => {
  it.only('should', async (done) => {
    debugger;
    const id = uuid.v4().replace(/-/g, '');
    await pool.add(id, 'data', 30);
    return request
      .get('/api/1')
      .expect(204)
      // .then(async (res) => {
      // .then((res) => {
      .end((res) => {
        // still returns 'data' instead of 'dataNew' after the route is hit
        const record = await pool.get(id);
        debugger;
        done();
      });
  });
});

在上面的代码中,我在数据库中创建了一条记录,然后我到达了终点,我尝试了一个 then() 和一个 end() 链接函数来检查数据库一次再次。结束点只是 datadataNew 而在 then() 函数中,它仍然是 returns 原来的 data

关于如何验证数据库中的新记录有什么想法吗?

参考文献:

通过将pool.add() returns 一个承诺链接到超级测试 request 然后 await 对记录进行验证来修复上述问题。有时它获取记录的速度仍然太快,因为 pool.update() 方法未在 request 命中的终点内 awaited。

describe('test', () => {
  it.only('should', async () => {
    const id = uuid.v4().replace(/-/g, '');
    await pool.add(id, 'data', 30).then(() => {
      return request
        .get('/api/1')
        .expect(204)
        // check custom headers
        //.expect('pool-before', 'data')
        //.expect('pool-after', 'dataModified')
        .then(async (res) => {
          const record = await pool.get(id);
          debugger;
          expect('dataModified').to.equal(record.fields.S);
        });
    });
  });
});

我能想到的唯一其他方法是通过自定义 header、延迟或使用模拟来检查值。

如果有人有更好的解决方案,请告诉我。