首页 > 解决方案 > 开玩笑地为所有测试创建单个 knex 连接池

问题描述

knex在我的项目中使用并尝试用它(使用jest)编写测试。我想在每次测试之前和每次测试之后执行一些脚本,因此每个测试都将在 db 中的相同数据上运行。

我尝试使用 knex 创建一个全局连接池,并在测试设置中执行脚本。问题是当我在不同describe范围内进行测试时。

例如,假设我有 2 个测试,每个测试都在不同的describe范围内

import { connection } from './global-setup.ts'
describe('first', () => {
    beforeEach( async () => {
        await connection.raw(...)
    }
    afterEach( async () => {
        await connection.raw(...)
    }
    it('test1', () => {...})
}

和第二次测试一样。结果是 beforeEach 中的脚本并不总是运行,因此第二个测试有时会通过,有时会失败。

我确实注意到连接池每次都会针对不同的描述范围进行初始化,我认为这是问题的原因。(如果我将第一个和第二个测试放在同一个描述范围内,它们总是通过)

我怎样才能解决这个问题?或者如何为所有描述测试创建一个连接池?

标签: javascriptnode.jsdatabasejestjsknex.js

解决方案


推荐阅读