gpt4 book ai didi

javascript - 正确编写数据库填充逻辑的集成测试

转载 作者:行者123 更新时间:2023-11-28 21:06:41 24 4
gpt4 key购买 nike

我有一个用 node 编写的事件处理程序这应该填充几个 MySQL表作为单个事务的结果(意味着所有操作都应该正确完成,否则一切都必须回滚到初始状态)。我对在这种情况下编写集成测试的正确方法有些怀疑。以下是我想到的一些可能的场景:

1) 在before all tests 阶段运行填充逻辑,然后在表上运行单独的测试,然后在after all tests 阶段清理所有内容。

describe('test', function() {
before(async () => {
// run event handler to populate database
});

after(async() => {
// cleanup
});

it('test Table A', () => { })

it('test Table B', () => { })

it('test Table C', () => { })
});

2) 分别在每次测试前后运行填充逻辑和清理。

describe('test', function() {
beforeEach(async () => {
// run event handler to populate database
});

afterEach(async() => {
// cleanup
});

it('test Table A', () => { })

it('test Table B', () => { })

it('test Table C', () => { })
});

3) 在一次测试中测试所有内容。

describe('test', function() {
before(async () => {
// just open the db connection
});

after(async() => {
// cleanup
});

it('populate db and test every table', () => { })
});

还有其他可能的情况。我想知道哪种方法更好,为什么。

ps:我用的是mochachai用于测试,但问题应该与语言无关。

最佳答案

我正在使用 jest,所以它可能会有所不同,但 jest 具有测试范围 setupteardown我用来克隆生产数据库结构然后分别清除数据的钩子(Hook)。然后我使用每个套件的之前/之后和每个测试之前/之后(beforeEach/afterEach)来设置和拆卸仅特定于测试的数据。

这意味着成本最高的步骤(设置表和关系)只在开始时完成一次,而且我仍然能够在语义上将我的测试拆分到适当的垂直领域。

关于javascript - 正确编写数据库填充逻辑的集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58867074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com