首页 > 解决方案 > 通过包含 `--runInBand` 修复了 Jest 测试的问题,但我对为什么感到困惑

问题描述

我有一个使用 Node 和 Express.js 的后端服务器,并且我使用 Jest 作为我的测试框架。我有一个我无法弄清楚的问题。先分享一下我的代码:

// user.model.test.ts

describe('User model test', () => {
  let connection: Connection;

  beforeEach(async () => {
    connection = await createConnection(ormConfig);
  });

  afterEach(async () => {
    connection.close();
  });

  it('should not create a user with the same email', async () => {
    await User.create({
      username: 'bar',
      email: 'foo@gmail.com',
      password: 'password'
    }).save();

    const user2 = User.create({
      username: 'foo',
      email: 'foo@gmail.com',
      password: 'password'
    });

    await expect(user2.save()).rejects.toThrowError();
  });
}

正如你在这里看到的,我正在从我的开发数据库创建一个单独的连接,这里的钩子附加到 test_db。

我对控制器进行了另一项测试。

user.controller.test.ts

describe('Get all users', () => {
  let connection: Connection;

  beforeEach(async () => {
    connection = await createConnection(ormConfig);
  });

  afterEach(async () => {
    connection.close();
  });

  it('should return status code 200', async (done) => {
    User.create({
      username: 'test',
      email: 'foobar@gmail.com',
      password: 'password'
    });

    const res = await rekwest.get('/api/v1/users');
    expect(res.status).toBe(200);
    // console.log(res.st);
    done();
  });

});

和我在这里做的一样。我正在创建一个测试并附加到 test_db 并期待一个不同的连接池。

现在控制器上的错误很奇怪User table already exists。在模型上我有一个错误test_db doesn't exists。现在,如果我删除了控制器测试中的钩子,错误就会消失,但我无法测试控制器。

所以我找到了一个关于如何使用 Jest 测试 MongoDB 的链接,我们有相同的想法,但我没有runInBand. 所以我添加了它jest --runInBand,出于某种原因,它修复了我的错误。有人可以向我解释发生了什么吗?在 Jest 文档中,基本上是说您的测试运行速度会快 50%,但我不需要,还是我不需要?

标签: unit-testingjestjs

解决方案


推荐阅读