【发布时间】:2020-07-31 00:02:54
【问题描述】:
我正在尝试找到一种干净的方法来编写集成测试(使用真实资源的 jest 的单元测试)和 jest,使用 Promise 链接,但我可以理解它。
除了正确嵌套承诺之外,我也不知道如何解决这两个问题:
- 如何在不同的 Promise 中有不同的
expects被 jest 正确拾取 - 即使有异常,也总是在清理资源的情况下进行拆解
我想链接 4 个函数,类似于 Act - Arrange - Assert 模式。 问题是这些功能对 f.e. 有异步调用。一个数据库,可以有期望。
为了更好地理解这里是一些伪代码,这在我的脑海中是如何看待的。这只应该提供对问题的更好理解。
const setupResources = () => new Promise(resolve => {
//async calls to a database to setup a test
await dynamoDBClient.put(params).promise();
// returns data which are necessary for the other steps
resolve(data);
});
const act = (data) => new Promise(resolve => {
// doing some stuff
const otherdata = {data};
// calling some endpoint asyc
const result = await axios.post(
`https://restapi.com/test`,
JSON.stringify(otherdata),
);
// some expects
expect(result.status).toBe(200);
// again some data which will be needed in the other steps
resolve({someInformation: 'info', data}) ;
});
const assertIt = (data) => {
const prarams = {/*db related data*/}
new Promise(resolve=>{
const dbdata = await dynamoDBClient.get(params).promise();
// some expectation
expect(dbdata).toBe(data.data);
resolve();
})
};
const tearDown = (data) => {
// cleanup of data base trash which should always happen
await dynamoDBClient.delete(data.params).promise();
};
如果有意义的话,实际测试应该看起来像这样。
it('test',()=>{
return setupResources()
.then(act(data))
.then(assertIt(data))
.finally(teardown(data));
})
【问题讨论】:
标签: unit-testing jestjs es6-promise