使用 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()
链接函数来检查数据库一次再次。结束点只是 data
到 dataNew
而在 then()
函数中,它仍然是 returns 原来的 data
。
关于如何验证数据库中的新记录有什么想法吗?
参考文献:
- Supertest: Verify database after request - 在底部的 TLDR 中,解决方案是使用
co
。我试过了,但遇到问题可能是因为我使用的是 await
而不是生成器。
通过将pool.add()
returns 一个承诺链接到超级测试 request
然后 await
对记录进行验证来修复上述问题。有时它获取记录的速度仍然太快,因为 pool.update()
方法未在 request
命中的终点内 await
ed。
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、延迟或使用模拟来检查值。
如果有人有更好的解决方案,请告诉我。
我想使用 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()
链接函数来检查数据库一次再次。结束点只是 data
到 dataNew
而在 then()
函数中,它仍然是 returns 原来的 data
。
关于如何验证数据库中的新记录有什么想法吗?
参考文献:
- Supertest: Verify database after request - 在底部的 TLDR 中,解决方案是使用
co
。我试过了,但遇到问题可能是因为我使用的是await
而不是生成器。
通过将pool.add()
returns 一个承诺链接到超级测试 request
然后 await
对记录进行验证来修复上述问题。有时它获取记录的速度仍然太快,因为 pool.update()
方法未在 request
命中的终点内 await
ed。
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、延迟或使用模拟来检查值。
如果有人有更好的解决方案,请告诉我。